Use ctrl for ext cmds, disable them in config.h

This commit is contained in:
Bert 2011-03-09 10:08:43 +01:00
parent 00d4b0f7cf
commit a82c45431b
4 changed files with 34 additions and 20 deletions

View file

@ -1,6 +1,6 @@
all: sxiv all: sxiv
VERSION=git-20110303 VERSION=git-20110309
CC?=gcc CC?=gcc
PREFIX?=/usr/local PREFIX?=/usr/local

View file

@ -5,9 +5,9 @@ typedef struct {
} command_t; } command_t;
static command_t commands[] = { static command_t commands[] = {
/* key reload? command, '#' is replaced by filename */ /* ctrl-... reload? command, '#' is replaced by filename */
{ XK_a, True, "jpegtran -rotate 270 -copy all -outfile # #" }, { XK_comma, True, "jpegtran -rotate 270 -copy all -outfile # #" },
{ XK_s, True, "jpegtran -rotate 90 -copy all -outfile # #" }, { XK_period, True, "jpegtran -rotate 90 -copy all -outfile # #" },
{ XK_A, True, "mogrify -rotate -90 #" }, { XK_less, True, "mogrify -rotate -90 #" },
{ XK_S, True, "mogrify -rotate +90 #" } { XK_greater, True, "mogrify -rotate +90 #" }
}; };

View file

@ -24,3 +24,7 @@ static const float zoom_levels[] = {
/* default dimension of thumbnails (width == height): */ /* default dimension of thumbnails (width == height): */
#define THUMB_SIZE 60 #define THUMB_SIZE 60
/* remove this line to disable external commands: *
* (otherwise have a look at commands.h to define them) */
#define EXT_COMMANDS

38
main.c
View file

@ -30,12 +30,16 @@
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include <X11/keysym.h> #include <X11/keysym.h>
#include "config.h"
#include "image.h" #include "image.h"
#include "options.h" #include "options.h"
#include "thumbs.h" #include "thumbs.h"
#include "util.h" #include "util.h"
#include "window.h" #include "window.h"
#ifdef EXT_COMMANDS
#include "commands.h" #include "commands.h"
#endif
typedef enum { typedef enum {
MODE_NORMAL = 0, MODE_NORMAL = 0,
@ -273,6 +277,7 @@ void read_dir_rec(const char *dirname) {
free(dirnames); free(dirnames);
} }
#ifdef EXT_COMMANDS
int run_command(const char *cline, Bool reload) { int run_command(const char *cline, Bool reload) {
int fncnt, fnlen; int fncnt, fnlen;
char *cn, *cmdline; char *cn, *cmdline;
@ -328,6 +333,7 @@ int run_command(const char *cline, Bool reload) {
free(cmdline); free(cmdline);
return ret; return ret;
} }
#endif /* EXT_COMMANDS */
/* event handling */ /* event handling */
@ -352,7 +358,7 @@ void redraw() {
} }
void on_keypress(XKeyEvent *kev) { void on_keypress(XKeyEvent *kev) {
int i, x, y; int x, y;
unsigned int w, h; unsigned int w, h;
char key; char key;
KeySym ksym; KeySym ksym;
@ -364,24 +370,28 @@ void on_keypress(XKeyEvent *kev) {
XLookupString(kev, &key, 1, &ksym, NULL); XLookupString(kev, &key, 1, &ksym, NULL);
changed = 0; changed = 0;
#ifdef EXT_COMMANDS
/* external commands from commands.h */ /* external commands from commands.h */
for (i = 0; i < LEN(commands); ++i) { if (CLEANMASK(kev->state) & ControlMask) {
if (commands[i].ksym == ksym) { for (x = 0; x < LEN(commands); ++x) {
win_set_cursor(&win, CURSOR_WATCH); if (commands[x].ksym == ksym) {
if (run_command(commands[i].cmdline, commands[i].reload)) { win_set_cursor(&win, CURSOR_WATCH);
if (mode == MODE_NORMAL) { if (run_command(commands[x].cmdline, commands[x].reload)) {
img_close(&img, 1); if (mode == MODE_NORMAL) {
load_image(fileidx); img_close(&img, 1);
tns_load(&tns, &win, fileidx, filenames[fileidx]); load_image(fileidx);
} else { tns_load(&tns, &win, fileidx, filenames[fileidx]);
tns_load(&tns, &win, tns.sel, filenames[tns.sel]); } else {
tns_load(&tns, &win, tns.sel, filenames[tns.sel]);
}
redraw();
} }
redraw(); win_set_cursor(&win, mode == MODE_NORMAL ? CURSOR_NONE : CURSOR_ARROW);
return;
} }
win_set_cursor(&win, mode == MODE_NORMAL ? CURSOR_NONE : CURSOR_ARROW);
return;
} }
} }
#endif
if (mode == MODE_NORMAL) { if (mode == MODE_NORMAL) {
switch (ksym) { switch (ksym) {