浏览代码

if isatty() first read from stdin and then grab the keyboard, otherwise first grab the keyboard and then read from stdin

master
Anselm R. Garbe 17 年前
父节点
当前提交
8a066fabd9
共有 1 个文件被更改,包括 17 次插入10 次删除
  1. +17
    -10
      main.c

+ 17
- 10
main.c 查看文件

@@ -108,6 +108,13 @@ drawmenu(void) {
XFlush(dpy);
}

static void
grabkeyboard(void) {
while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
GrabModeAsync, CurrentTime) != GrabSuccess)
usleep(1000);
}

static unsigned long
initcolor(const char *colstr) {
Colormap cmap = DefaultColormap(dpy, screen);
@@ -418,12 +425,6 @@ main(int argc, char *argv[]) {
XModifierKeymap *modmap;
XSetWindowAttributes wa;

if(argc == 2 && !strncmp("-v", argv[1], 3))
eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");
else if(isatty(STDIN_FILENO)) {
fputs("error: dmenu can't run in an interactive shell\n", stdout);
usage();
}
/* command line args */
for(i = 1; i < argc; i++)
if(!strncmp(argv[i], "-b", 3)) {
@@ -447,6 +448,8 @@ main(int argc, char *argv[]) {
else if(!strncmp(argv[i], "-sf", 4)) {
if(++i < argc) selfg = argv[i];
}
else if(!strncmp(argv[i], "-v", 3))
eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");
else
usage();
setlocale(LC_CTYPE, "");
@@ -455,10 +458,14 @@ main(int argc, char *argv[]) {
eprint("dmenu: cannot open display\n");
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
GrabModeAsync, CurrentTime) != GrabSuccess)
usleep(1000);
maxname = readstdin();
if(isatty(STDIN_FILENO)) {
maxname = readstdin();
grabkeyboard();
}
else { /* prevent keypress loss */
grabkeyboard();
maxname = readstdin();
}
/* init modifier map */
modmap = XGetModifierMapping(dpy);
for (i = 0; i < 8; i++) {


正在加载...
取消
保存