Ver código fonte

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

Fixes issue #84
master
Bert Münnich 12 anos atrás
pai
commit
6f05e77728
6 arquivos alterados com 59 adições e 37 exclusões
  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 Ver arquivo

@@ -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 Ver arquivo

@@ -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 Ver arquivo

@@ -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 Ver arquivo

@@ -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 Ver arquivo

@@ -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 Ver arquivo

@@ -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


Carregando…
Cancelar
Salvar