⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 options.c

📁 linux下很好的截图工具。 抓取整个桌面、某个指定的窗口、以及选择的矩形区域。
💻 C
字号:
/* options.cCopyright (C) 1999,2000 Tom Gilbert.Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), todeal in the Software without restriction, including without limitation therights to use, copy, modify, merge, publish, distribute, sublicense, and/orsell copies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies of the Software and its documentation and acknowledgment shall begiven in the documentation and software packages that this Software wasused.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALLTHE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/#include "scrot.h"#include "options.h"static void scrot_parse_option_array(int argc, char **argv);scrotoptions opt;voidinit_parse_options(int argc, char **argv){   /* Set default options */   memset(&opt, 0, sizeof(scrotoptions));   opt.quality = 75;   /* Parse the cmdline args */   scrot_parse_option_array(argc, argv);}static voidscrot_parse_option_array(int argc, char **argv){   static char stropts[] = "bcd:e:hmq:st:v+:";   static struct option lopts[] = {      /* actions */      {"help", 0, 0, 'h'},                  /* okay */      {"version", 0, 0, 'v'},               /* okay */      {"count", 0, 0, 'c'},      {"select", 0, 0, 's'},      {"border", 0, 0, 'b'},      {"multidisp", 0, 0, 'm'},      /* toggles */      {"thumb", 1, 0, 't'},      {"delay", 1, 0, 'd'},      {"quality", 1, 0, 'q'},      {"exec", 1, 0, 'e'},      {"debug-level", 1, 0, '+'},      {0, 0, 0, 0}   };   int optch = 0, cmdx = 0;   /* Now to pass some optionarinos */   while ((optch = getopt_long(argc, argv, stropts, lopts, &cmdx)) !=          EOF)   {      switch (optch)      {        case 0:           break;        case 'h':           show_usage();           break;        case 'v':           show_version();           break;        case 'b':           opt.border = 1;           break;        case 'd':           opt.delay = atoi(optarg);           break;        case 'e':           opt.exec = gib_estrdup(optarg);           break;        case 'm':           opt.multidisp = 1;           break;        case 'q':           opt.quality = atoi(optarg);           break;        case 's':           opt.select = 1;           break;        case '+':           opt.debug_level = atoi(optarg);           break;        case 'c':           opt.countdown = 1;           break;        case 't':           options_parse_thumbnail(optarg);           break;        default:           break;      }   }   /* Now the leftovers, which must be files */   if (optind < argc)   {      while (optind < argc)      {         /* If recursive is NOT set, but the only argument is a directory            name, we grab all the files in there, but not subdirs */         if (!opt.output_file)         {            opt.output_file = argv[optind++];            if (opt.thumb)               opt.thumb_file = name_thumbnail(opt.output_file);         }         else            gib_weprintf("unrecognised option %s\n", argv[optind++]);      }   }   /* So that we can safely be called again */   optind = 1;}char *name_thumbnail(char *name){   size_t length = 0;   char *new_title;   char *dot_pos;   size_t diff = 0;   length = strlen(name) + 7;   new_title = gib_emalloc(length);   dot_pos = strrchr(name, '.');   if (dot_pos)   {      diff = (dot_pos - name) / sizeof(char);      strncpy(new_title, name, diff);      strcat(new_title, "-thumb");      strcat(new_title, dot_pos);   }   else      sprintf(new_title, "%s-thumb", name);   return new_title;}voidoptions_parse_thumbnail(char *optarg){   char *tok;   if (strchr(optarg, 'x')) /* We want to specify the geometry */   {     tok = strtok(optarg, "x");     opt.thumb_width = atoi(tok);     tok = strtok(NULL, "x");     if (tok)     {       opt.thumb_width = atoi(optarg);       opt.thumb_height = atoi(tok);       if (opt.thumb_width < 0)         opt.thumb_width = 1;       if (opt.thumb_height < 0)         opt.thumb_height = 1;       if (!opt.thumb_width && !opt.thumb_height)         opt.thumb = 0;       else         opt.thumb = 1;     }   }   else   {     opt.thumb = atoi(optarg);     if (opt.thumb < 1)       opt.thumb = 1;     else if (opt.thumb > 100)       opt.thumb = 100;   }}voidshow_version(void){   printf(PACKAGE " version " VERSION "\n");   exit(0);}voidshow_mini_usage(void){   printf("Usage : " PACKAGE " [OPTIONS]... FILE\nUse " PACKAGE          " --help for detailed usage information\n");   exit(0);}voidshow_usage(void){   fprintf(stdout,           "Usage : " PACKAGE " [OPTIONS]... [FILE]\n"           "  Where FILE is the target file for the screenshot.\n"           "  If FILE is not specified, a date-stamped file will be dropped in the\n"           "  current directory.\n" "  See man " PACKAGE " for more details\n"           "  -h, --help                display this help and exit\n"           "  -v, --version             output version information and exit\n"           "  -b, --border              When selecting a window, grab wm border too\n"           "  -c, --count               show a countdown before taking the shot\n"           "  -d, --delay NUM           wait NUM seconds before taking a shot\n"           "  -e, --exec APP            run APP on the resulting screenshot\n"           "  -q, --quality NUM         Image quality (1-100) high value means\n"           "                            high size, low compression. Default: 75.\n"           "                            For lossless compression formats, like png,\n"           "                            low quality means high compression.\n"           "  -m, --multidisp           For multiple heads, grab shot from each\n"           "                            and join them together.\n"           "  -s, --select              interactively choose a window or rectnagle\n"           "                            with the mouse\n"           "  -t, --thumb NUM           generate thumbnail too. NUM is the percentage\n"           "                            of the original size for the thumbnail to be,\n"           "                            or the geometry in percent, e.g. 50x60 or 80x20.\n"           "\n" "  SPECIAL STRINGS\n"           "  Both the --exec and filename parameters can take format specifiers\n"           "  that are expanded by " PACKAGE " when encountered.\n"           "  There are two types of format specifier. Characters preceded by a '%%'\n"           "  are interpretted by strftime(2). See man strftime for examples.\n"           "  These options may be used to refer to the current date and time.\n"           "  The second kind are internal to " PACKAGE           "  and are prefixed by '$'\n"           "  The following specifiers are recognised:\n"           "                  $f image path/filename (ignored when used in the filename)\n"           "                  $m thumbnail path/filename\n"           "                  $n image name (ignored when used in the filename)\n"           "                  $s image size (bytes) (ignored when used in the filename)\n"           "                  $p image pixel size\n"           "                  $w image width\n"           "                  $h image height\n"           "                  $t image format\n"           "                  $$  prints a literal '$'\n"           "                  \\n prints a newline (ignored when used in the filename)\n"           "  Example:\n" "          " PACKAGE           " '%%Y-%%m-%%d_$wx$h_scrot.png' -e 'mv $f ~/images/shots/'\n"           "          Creates a file called something like 2000-10-30_2560x1024_scrot.png\n"           "          and moves it to your images directory.\n" "\n"           "This program is free software see the file COPYING for licensing info.\n"           "Copyright Tom Gilbert 2000\n"           "Email bugs to <scrot_sucks@linuxbrit.co.uk>\n");   exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -