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
Devin J. Pohly 2017-10-10 10:30:23 -05:00
parent 1f24bde82b
commit 3e44ee5569
3 changed files with 4 additions and 14 deletions

8
st.c
View File

@ -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
View File

@ -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
View File

@ -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();