~petersanchez/st

3e44ee5569a81ba6f06e1ecd19bf0ceb1e97f18d — Devin J. Pohly 6 years ago 1f24bde
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>
3 files changed, 4 insertions(+), 14 deletions(-)

M st.c
M win.h
M x.c
M st.c => st.c +2 -6
@@ 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);

M win.h => win.h +0 -2
@@ 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);

M x.c => x.c +2 -6
@@ 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();