diff options
| -rw-r--r-- | commands.c | 57 | ||||
| -rw-r--r-- | config.h | 14 | 
2 files changed, 28 insertions, 43 deletions
@@ -16,7 +16,9 @@   * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301, USA.   */ +#define _POSIX_C_SOURCE 200112L /* for setenv(3) */  #include <stdlib.h> +  #include <string.h>  #include <unistd.h>  #include <sys/wait.h> @@ -345,45 +347,27 @@ int it_open_with(arg_t a) {  		warn("could not exec: %s", prog);  		exit(1);  	} else if (pid < 0) { -		warn("could not for. program was: %s", prog); +		warn("could not fork. program was: %s", prog);  	}  	return 0;  }  int it_shell_cmd(arg_t a) { -	const char *cline = (const char*) a; -	char *cn, *cmdline; -	const char *co, *fpath; -	int fpcnt, fplen, status; +	int n, status; +	const char *cmdline = (const char*) a;  	pid_t pid; -	if (!cline || !*cline) +	if (!cmdline || !*cmdline)  		return 0; -	/* build command line: */ -	fpcnt = 0; -	co = cline - 1; -	while ((co = strchr(co + 1, '#'))) -		fpcnt++; -	if (!fpcnt) +	n = mode == MODE_IMAGE ? fileidx : tns.sel; + +	if (setenv("SXIV_IMG", files[n].path, 1) < 0) { +		warn("could not change env.-variable: SXIV_IMG. command line was: %s", +		     cmdline);  		return 0; -	fpath = files[mode == MODE_IMAGE ? fileidx : tns.sel].path; -	fplen = strlen(fpath); -	cn = cmdline = (char*) s_malloc((strlen(cline) + fpcnt * (fplen + 2)) * -	                                sizeof(char)); -	/* replace all '#' with filename: */ -	for (co = cline; *co; co++) { -		if (*co == '#') { -			*cn++ = '"'; -			strcpy(cn, fpath); -			cn += fplen; -			*cn++ = '"'; -		} else { -			*cn++ = *co; -		}  	} -	*cn = '\0';  	win_set_cursor(&win, CURSOR_WATCH); @@ -402,17 +386,16 @@ int it_shell_cmd(arg_t a) {  		     WEXITSTATUS(status), cmdline);  	if (mode == MODE_IMAGE) { -		if (fileidx < tns.cnt) -			tns_load(&tns, fileidx, &files[fileidx], False, True);  		img_close(&img, 1);  		load_image(fileidx); -	} else { -		if (!tns_load(&tns, tns.sel, &files[tns.sel], True, False)) { -			remove_file(tns.sel, 0); -			tns.dirty = 1; -			if (tns.sel >= tns.cnt) -				tns.sel = tns.cnt - 1; -		} +	} +	if (!tns_load(&tns, n, &files[n], True, mode == MODE_IMAGE) && +	    mode == MODE_THUMB) +	{ +		remove_file(tns.sel, 0); +		tns.dirty = 1; +		if (tns.sel >= tns.cnt) +			tns.sel = tns.cnt - 1;  	}  end: @@ -420,7 +403,5 @@ end:  		win_set_cursor(&win, CURSOR_ARROW);  	/* else: cursor gets reset in redraw() */ -	free(cmdline); -  	return 1;  } @@ -110,11 +110,15 @@ static const keymap_t keys[] = {  	/* open current image with given program: */  	{ True,   XK_g,             it_open_with,         (arg_t) "gimp" }, -	/* run shell command line on current file ('#' is replaced by file path: */ -	{ True,   XK_less,          it_shell_cmd,         (arg_t) "mogrify -rotate -90 #" }, -	{ True,   XK_greater,       it_shell_cmd,         (arg_t) "mogrify -rotate +90 #" }, -	{ True,   XK_comma,         it_shell_cmd,         (arg_t) "jpegtran -rotate 270 -copy all -outfile # #" }, -	{ True,   XK_period,        it_shell_cmd,         (arg_t) "jpegtran -rotate 90 -copy all -outfile # #" }, +	/* run shell command line on current file ("$SXIV_IMG"): */ +	{ True,   XK_less,          it_shell_cmd,         (arg_t) \ +			"mogrify -rotate -90 \"$SXIV_IMG\"" }, +	{ True,   XK_greater,       it_shell_cmd,         (arg_t) \ +			"mogrify -rotate +90 \"$SXIV_IMG\"" }, +	{ True,   XK_comma,         it_shell_cmd,         (arg_t) \ +			"jpegtran -rotate 270 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" }, +	{ True,   XK_period,        it_shell_cmd,         (arg_t) \ +			"jpegtran -rotate  90 -copy all -outfile \"$SXIV_IMG\" \"$SXIV_IMG\"" },  };  /* mouse button mappings for image mode: */  | 
