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>master
							parent
							
								
									1f24bde82b
								
							
						
					
					
						commit
						3e44ee5569
					
				
							
								
								
									
										8
									
								
								st.c
								
								
								
								
							
							
						
						
									
										8
									
								
								st.c
								
								
								
								
							| 
						 | 
				
			
			@ -60,7 +60,7 @@ char *argv0;
 | 
			
		|||
#define ISDELIM(u)		(utf8strchr(worddelimiters, u) != NULL)
 | 
			
		||||
 | 
			
		||||
/* constants */
 | 
			
		||||
#define ISO14755CMD		"dmenu -w %lu -p codepoint: </dev/null"
 | 
			
		||||
#define ISO14755CMD		"dmenu -w \"$WINDOWID\" -p codepoint: </dev/null"
 | 
			
		||||
 | 
			
		||||
enum cursor_movement {
 | 
			
		||||
	CURSOR_SAVE,
 | 
			
		||||
| 
						 | 
				
			
			@ -706,7 +706,6 @@ execsh(void)
 | 
			
		|||
	setenv("SHELL", sh, 1);
 | 
			
		||||
	setenv("HOME", pw->pw_dir, 1);
 | 
			
		||||
	setenv("TERM", termname, 1);
 | 
			
		||||
	xsetenv();
 | 
			
		||||
 | 
			
		||||
	signal(SIGCHLD, SIG_DFL);
 | 
			
		||||
	signal(SIGHUP, SIG_DFL);
 | 
			
		||||
| 
						 | 
				
			
			@ -1993,14 +1992,11 @@ tprinter(char *s, size_t len)
 | 
			
		|||
void
 | 
			
		||||
iso14755(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	unsigned long id = xwinid();
 | 
			
		||||
	char cmd[sizeof(ISO14755CMD) + NUMMAXLEN(id)];
 | 
			
		||||
	FILE *p;
 | 
			
		||||
	char *us, *e, codepoint[9], uc[UTF_SIZ];
 | 
			
		||||
	unsigned long utf32;
 | 
			
		||||
 | 
			
		||||
	snprintf(cmd, sizeof(cmd), ISO14755CMD, id);
 | 
			
		||||
	if (!(p = popen(cmd, "r")))
 | 
			
		||||
	if (!(p = popen(ISO14755CMD, "r")))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	us = fgets(codepoint, sizeof(codepoint), p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								win.h
								
								
								
								
							
							
						
						
									
										2
									
								
								win.h
								
								
								
								
							| 
						 | 
				
			
			@ -19,12 +19,10 @@ void xinit(void);
 | 
			
		|||
void xloadcols(void);
 | 
			
		||||
int xsetcolorname(int, const char *);
 | 
			
		||||
void xloadfonts(char *, double);
 | 
			
		||||
void xsetenv(void);
 | 
			
		||||
void xsettitle(char *);
 | 
			
		||||
void xsetpointermotion(int);
 | 
			
		||||
void xseturgency(int);
 | 
			
		||||
void xunloadfonts(void);
 | 
			
		||||
void xresize(int, int);
 | 
			
		||||
void xselpaste(void);
 | 
			
		||||
unsigned long xwinid(void);
 | 
			
		||||
void xsetsel(char *, Time);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								x.c
								
								
								
								
							
							
						
						
									
										8
									
								
								x.c
								
								
								
								
							| 
						 | 
				
			
			@ -89,6 +89,7 @@ static void xdrawcursor(void);
 | 
			
		|||
static int xgeommasktogravity(int);
 | 
			
		||||
static int xloadfont(Font *, FcPattern *);
 | 
			
		||||
static void xunloadfont(Font *);
 | 
			
		||||
static void xsetenv(void);
 | 
			
		||||
 | 
			
		||||
static void expose(XEvent *);
 | 
			
		||||
static void visibility(XEvent *);
 | 
			
		||||
| 
						 | 
				
			
			@ -1487,12 +1488,6 @@ xbell(int vol)
 | 
			
		|||
	XkbBell(xw.dpy, xw.win, vol, (Atom)NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long
 | 
			
		||||
xwinid(void)
 | 
			
		||||
{
 | 
			
		||||
	return xw.win;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
focus(XEvent *ev)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -1765,6 +1760,7 @@ run:
 | 
			
		|||
	XSetLocaleModifiers("");
 | 
			
		||||
	tnew(MAX(cols, 1), MAX(rows, 1));
 | 
			
		||||
	xinit();
 | 
			
		||||
	xsetenv();
 | 
			
		||||
	selinit();
 | 
			
		||||
	run();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in New Issue