Call xsetenv() in main process instead of child - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3e44ee5569a81ba6f06e1ecd19bf0ceb1e97f18d
 (DIR) parent 1f24bde82b19912c080fbb4a0b153a248cd6c6ea
 (HTM) 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:
         M st.c                                |       8 ++------
         M win.h                               |       2 --
         M x.c                                 |       8 ++------
       
       3 files changed, 4 insertions(+), 14 deletions(-)
       ---
 (DIR) 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);
 (DIR) 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);
 (DIR) 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();