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:
parent
1f24bde82b
commit
3e44ee5569
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();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user