Call xsetenv() in main process instead of child
This makes xsetenv internal to x.c, and allows iso14755's external command to use $WINDOWID instead of having to snprintf it again. (The same benefit will apply to the externalpipe patch.) The xwinid function is no longer needed. Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
This commit is contained in:
		
							
								
								
									
										8
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								st.c
									
									
									
									
									
								
							| @@ -60,7 +60,7 @@ char *argv0; | |||||||
| #define ISDELIM(u)		(utf8strchr(worddelimiters, u) != NULL) | #define ISDELIM(u)		(utf8strchr(worddelimiters, u) != NULL) | ||||||
|  |  | ||||||
| /* constants */ | /* constants */ | ||||||
| #define ISO14755CMD		"dmenu -w %lu -p codepoint: </dev/null" | #define ISO14755CMD		"dmenu -w \"$WINDOWID\" -p codepoint: </dev/null" | ||||||
|  |  | ||||||
| enum cursor_movement { | enum cursor_movement { | ||||||
| 	CURSOR_SAVE, | 	CURSOR_SAVE, | ||||||
| @@ -706,7 +706,6 @@ execsh(void) | |||||||
| 	setenv("SHELL", sh, 1); | 	setenv("SHELL", sh, 1); | ||||||
| 	setenv("HOME", pw->pw_dir, 1); | 	setenv("HOME", pw->pw_dir, 1); | ||||||
| 	setenv("TERM", termname, 1); | 	setenv("TERM", termname, 1); | ||||||
| 	xsetenv(); |  | ||||||
|  |  | ||||||
| 	signal(SIGCHLD, SIG_DFL); | 	signal(SIGCHLD, SIG_DFL); | ||||||
| 	signal(SIGHUP, SIG_DFL); | 	signal(SIGHUP, SIG_DFL); | ||||||
| @@ -1993,14 +1992,11 @@ tprinter(char *s, size_t len) | |||||||
| void | void | ||||||
| iso14755(const Arg *arg) | iso14755(const Arg *arg) | ||||||
| { | { | ||||||
| 	unsigned long id = xwinid(); |  | ||||||
| 	char cmd[sizeof(ISO14755CMD) + NUMMAXLEN(id)]; |  | ||||||
| 	FILE *p; | 	FILE *p; | ||||||
| 	char *us, *e, codepoint[9], uc[UTF_SIZ]; | 	char *us, *e, codepoint[9], uc[UTF_SIZ]; | ||||||
| 	unsigned long utf32; | 	unsigned long utf32; | ||||||
|  |  | ||||||
| 	snprintf(cmd, sizeof(cmd), ISO14755CMD, id); | 	if (!(p = popen(ISO14755CMD, "r"))) | ||||||
| 	if (!(p = popen(cmd, "r"))) |  | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	us = fgets(codepoint, sizeof(codepoint), p); | 	us = fgets(codepoint, sizeof(codepoint), p); | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								win.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								win.h
									
									
									
									
									
								
							| @@ -19,12 +19,10 @@ void xinit(void); | |||||||
| void xloadcols(void); | void xloadcols(void); | ||||||
| int xsetcolorname(int, const char *); | int xsetcolorname(int, const char *); | ||||||
| void xloadfonts(char *, double); | void xloadfonts(char *, double); | ||||||
| void xsetenv(void); |  | ||||||
| void xsettitle(char *); | void xsettitle(char *); | ||||||
| void xsetpointermotion(int); | void xsetpointermotion(int); | ||||||
| void xseturgency(int); | void xseturgency(int); | ||||||
| void xunloadfonts(void); | void xunloadfonts(void); | ||||||
| void xresize(int, int); | void xresize(int, int); | ||||||
| void xselpaste(void); | void xselpaste(void); | ||||||
| unsigned long xwinid(void); |  | ||||||
| void xsetsel(char *, Time); | void xsetsel(char *, Time); | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								x.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								x.c
									
									
									
									
									
								
							| @@ -89,6 +89,7 @@ static void xdrawcursor(void); | |||||||
| static int xgeommasktogravity(int); | static int xgeommasktogravity(int); | ||||||
| static int xloadfont(Font *, FcPattern *); | static int xloadfont(Font *, FcPattern *); | ||||||
| static void xunloadfont(Font *); | static void xunloadfont(Font *); | ||||||
|  | static void xsetenv(void); | ||||||
|  |  | ||||||
| static void expose(XEvent *); | static void expose(XEvent *); | ||||||
| static void visibility(XEvent *); | static void visibility(XEvent *); | ||||||
| @@ -1487,12 +1488,6 @@ xbell(int vol) | |||||||
| 	XkbBell(xw.dpy, xw.win, vol, (Atom)NULL); | 	XkbBell(xw.dpy, xw.win, vol, (Atom)NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
| unsigned long |  | ||||||
| xwinid(void) |  | ||||||
| { |  | ||||||
| 	return xw.win; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void | void | ||||||
| focus(XEvent *ev) | focus(XEvent *ev) | ||||||
| { | { | ||||||
| @@ -1765,6 +1760,7 @@ run: | |||||||
| 	XSetLocaleModifiers(""); | 	XSetLocaleModifiers(""); | ||||||
| 	tnew(MAX(cols, 1), MAX(rows, 1)); | 	tnew(MAX(cols, 1), MAX(rows, 1)); | ||||||
| 	xinit(); | 	xinit(); | ||||||
|  | 	xsetenv(); | ||||||
| 	selinit(); | 	selinit(); | ||||||
| 	run(); | 	run(); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user