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