# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 3e44ee5569a81ba6f06e1ecd19bf0ceb1e97f18d
    parent 1f24bde82b19912c080fbb4a0b153a248cd6c6ea
    Author: Devin J. Pohly <djpohly@gmail.com>
    Date:   Tue, 10 Oct 2017 10:30:23 -0500

    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>

    Diffstat:
    Mst.c | 8++------
    Mwin.h | 2--
    Mx.c | 8++------

    3 files changed, 4 insertions(+), 14 deletions(-)
    diff --git a/st.c b/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);
    diff --git a/win.h b/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);
    diff --git a/x.c b/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();