Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Call xsetenv() in main process instead of child
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
ae93ade
..
668b312
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-60,7
+60,7
@@
char *argv0;
#define ISDELIM(u) (utf8strchr(worddelimiters, u) != NULL)
/* constants */
#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,
enum cursor_movement {
CURSOR_SAVE,
@@
-386,6
+386,13
@@
static const char base64_digits[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
+char
+base64dec_getc(const char **src)
+{
+ while (**src && !isprint(**src)) (*src)++;
+ return *((*src)++);
+}
+
char *
base64dec(const char *src)
{
char *
base64dec(const char *src)
{
@@
-393,13
+400,13
@@
base64dec(const char *src)
char *result, *dst;
if (in_len % 4)
char *result, *dst;
if (in_len % 4)
-
return NULL
;
+
in_len += 4 - (in_len % 4)
;
result = dst = xmalloc(in_len / 4 * 3 + 1);
while (*src) {
result = dst = xmalloc(in_len / 4 * 3 + 1);
while (*src) {
- int a = base64_digits[(unsigned char)
*src++
];
- int b = base64_digits[(unsigned char)
*src++
];
- int c = base64_digits[(unsigned char)
*src++
];
- int d = base64_digits[(unsigned char)
*src++
];
+ int a = base64_digits[(unsigned char)
base64dec_getc(&src)
];
+ int b = base64_digits[(unsigned char)
base64dec_getc(&src)
];
+ int c = base64_digits[(unsigned char)
base64dec_getc(&src)
];
+ int d = base64_digits[(unsigned char)
base64dec_getc(&src)
];
*dst++ = (a << 2) | ((b & 0x30) >> 4);
if (c == -1)
*dst++ = (a << 2) | ((b & 0x30) >> 4);
if (c == -1)
@@
-699,7
+706,6
@@
execsh(void)
setenv("SHELL", sh, 1);
setenv("HOME", pw->pw_dir, 1);
setenv("TERM", termname, 1);
setenv("SHELL", sh, 1);
setenv("HOME", pw->pw_dir, 1);
setenv("TERM", termname, 1);
- xsetenv();
signal(SIGCHLD, SIG_DFL);
signal(SIGHUP, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
signal(SIGHUP, SIG_DFL);
@@
-1986,14
+1992,11
@@
tprinter(char *s, size_t len)
void
iso14755(const Arg *arg)
{
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;
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);
return;
us = fgets(codepoint, sizeof(codepoint), p);