ソースを参照

New options: -[io], read/write files from/to stdin/out

Fixes issue #84
master
Bert Münnich 12年前
コミット
6f05e77728
6個のファイルの変更59行の追加37行の削除
  1. +2
    -0
      README.md
  2. +7
    -0
      commands.c
  3. +24
    -25
      main.c
  4. +16
    -4
      options.c
  5. +1
    -0
      options.h
  6. +9
    -8
      sxiv.1

+ 2
- 0
README.md ファイルの表示

@@ -75,8 +75,10 @@ of small previews is displayed, making it easy to choose an image to open.
-f Start in fullscreen mode
-g GEOMETRY Set window position and size
(see section GEOMETRY SPECIFICATIONS of X(7))
-i Read file list from stdin
-n NUM Start at picture NUM
-N NAME Set X window resource name to NAME
-o Write file list to stdout when quitting
-p Pixelize, i.e. turn off image anti-aliasing
-q Be quiet, disable warnings
-r Search given directories recursively for images


+ 7
- 0
commands.c ファイルの表示

@@ -26,6 +26,7 @@

#include "commands.h"
#include "image.h"
#include "options.h"
#include "thumbs.h"
#include "util.h"
#include "config.h"
@@ -57,6 +58,12 @@ const int ss_delays[] = {

bool it_quit(arg_t a)
{
unsigned int i;

if (options->to_stdout) {
for (i = 0; i < filecnt; i++)
printf("%s\n", files[i].name);
}
cleanup();
exit(EXIT_SUCCESS);
}


+ 24
- 25
main.c ファイルの表示

@@ -622,7 +622,7 @@ int main(int argc, char **argv)
exit(EXIT_SUCCESS);
}

if (options->filecnt == 0) {
if (options->filecnt == 0 && !options->from_stdin) {
print_usage();
exit(EXIT_FAILURE);
}
@@ -635,7 +635,6 @@ int main(int argc, char **argv)
files = (fileinfo_t*) s_malloc(filecnt * sizeof(fileinfo_t));
fileidx = 0;

/* build file list: */
if (options->from_stdin) {
filename = NULL;
while ((len = get_line(&filename, &n, stdin)) > 0) {
@@ -645,34 +644,34 @@ int main(int argc, char **argv)
}
if (filename != NULL)
free(filename);
} else {
for (i = 0; i < options->filecnt; i++) {
filename = options->filenames[i];
}

for (i = 0; i < options->filecnt; i++) {
filename = options->filenames[i];

if (stat(filename, &fstats) < 0) {
warn("could not stat file: %s", filename);
if (stat(filename, &fstats) < 0) {
warn("could not stat file: %s", filename);
continue;
}
if (!S_ISDIR(fstats.st_mode)) {
check_add_file(filename);
} else {
if (!options->recursive) {
warn("ignoring directory: %s", filename);
continue;
}
if (!S_ISDIR(fstats.st_mode)) {
if (r_opendir(&dir, filename) < 0) {
warn("could not open directory: %s", filename);
continue;
}
start = fileidx;
while ((filename = r_readdir(&dir)) != NULL) {
check_add_file(filename);
} else {
if (!options->recursive) {
warn("ignoring directory: %s", filename);
continue;
}
if (r_opendir(&dir, filename) < 0) {
warn("could not open directory: %s", filename);
continue;
}
start = fileidx;
while ((filename = r_readdir(&dir)) != NULL) {
check_add_file(filename);
free((void*) filename);
}
r_closedir(&dir);
if (fileidx - start > 1)
qsort(files + start, fileidx - start, sizeof(fileinfo_t), fncmp);
free((void*) filename);
}
r_closedir(&dir);
if (fileidx - start > 1)
qsort(files + start, fileidx - start, sizeof(fileinfo_t), fncmp);
}
}



+ 16
- 4
options.c ファイルの表示

@@ -33,7 +33,7 @@ const options_t *options = (const options_t*) &_options;

void print_usage(void)
{
printf("usage: sxiv [-bcdFfhpqrstvZ] [-g GEOMETRY] [-n NUM] "
printf("usage: sxiv [-bcdFfhiopqrstvZ] [-g GEOMETRY] [-n NUM] "
"[-N name] [-z ZOOM] FILES...\n");
}

@@ -46,6 +46,8 @@ void parse_options(int argc, char **argv)
{
int opt, t;

_options.from_stdin = false;
_options.to_stdout = false;
_options.recursive = false;
_options.startnum = 0;

@@ -63,7 +65,7 @@ void parse_options(int argc, char **argv)
_options.thumb_mode = false;
_options.clean_cache = false;

while ((opt = getopt(argc, argv, "bcdFfg:hn:N:pqrstvZz:")) != -1) {
while ((opt = getopt(argc, argv, "bcdFfg:hin:N:opqrstvZz:")) != -1) {
switch (opt) {
case '?':
print_usage();
@@ -89,6 +91,9 @@ void parse_options(int argc, char **argv)
case 'h':
print_usage();
exit(EXIT_SUCCESS);
case 'i':
_options.from_stdin = true;
break;
case 'n':
if (sscanf(optarg, "%d", &t) <= 0 || t < 1) {
fprintf(stderr, "sxiv: invalid argument for option -n: %s\n",
@@ -101,6 +106,9 @@ void parse_options(int argc, char **argv)
case 'N':
_options.res_name = optarg;
break;
case 'o':
_options.to_stdout = true;
break;
case 'p':
_options.aa = false;
break;
@@ -137,6 +145,10 @@ void parse_options(int argc, char **argv)

_options.filenames = argv + optind;
_options.filecnt = argc - optind;
_options.from_stdin = _options.filecnt == 1 &&
STREQ(_options.filenames[0], "-");

if (_options.filecnt == 1 && STREQ(_options.filenames[0], "-")) {
_options.filenames++;
_options.filecnt--;
_options.from_stdin = true;
}
}

+ 1
- 0
options.h ファイルの表示

@@ -26,6 +26,7 @@ typedef struct {
/* file list: */
char **filenames;
bool from_stdin;
bool to_stdout;
bool recursive;
int filecnt;
int startnum;


+ 9
- 8
sxiv.1 ファイルの表示

@@ -3,7 +3,7 @@
sxiv \- Simple X Image Viewer
.SH SYNOPSIS
.B sxiv
.RB [ \-bcdFfhpqrstvZ ]
.RB [ \-bcdFfhiopqrstvZ ]
.RB [ \-g
.IR GEOMETRY ]
.RB [ \-n
@@ -17,13 +17,6 @@ sxiv \- Simple X Image Viewer
sxiv is a simple image viewer for X. It only has the most basic features
required for fast image viewing.
.P
sxiv opens all named
.IR FILE s,
or reads the names of the files to open from standard input, if only a single
hyphen\-minus
.RB ( \- )
is given.
.P
sxiv has two modes of operation: image and thumbnail mode. The default is image
mode, in which only the current image is shown. In thumbnail mode a grid of
small previews is displayed, making it easy to choose an image to open.
@@ -65,6 +58,14 @@ Set the resource name of sxiv's X window to NAME.
.B \-h
Print brief usage information to standard output and exit.
.TP
.B \-i
Read names of files to open from standard input.
.TP
.B \-o
Write list of opened files to standard output when quitting. If combined with
.IR \-i ,
then sxiv acts as a visual filter/pipe.
.TP
.B \-p
Pixelize images, i.e. turn off anti-aliasing.
.TP


||||||
x
 
000:0
読み込み中…
キャンセル
保存