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