parent
447bc1c784
commit
6f05e77728
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
51
main.c
51
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];
|
||||
}
|
||||
|
||||
if (stat(filename, &fstats) < 0) {
|
||||
warn("could not stat file: %s", filename);
|
||||
for (i = 0; i < options->filecnt; i++) {
|
||||
filename = options->filenames[i];
|
||||
|
||||
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)) {
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
20
options.c
20
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;
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ typedef struct {
|
||||
/* file list: */
|
||||
char **filenames;
|
||||
bool from_stdin;
|
||||
bool to_stdout;
|
||||
bool recursive;
|
||||
int filecnt;
|
||||
int startnum;
|
||||
|
17
sxiv.1
17
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
|
||||
|
Loading…
Reference in New Issue
Block a user