first
[dcc-suckless-config] / devour / devour.c
1 /*
2  * devour
3  * X11 window swallower
4  */
5
6 #include <X11/Xlib.h>
7 #include <stdlib.h>
8 #include <string.h>
9
10 #define UNSAFE_CHARS "`\"'()[]& "
11
12 void run_command(char **argv) {
13   char arg_char;
14   char *arg;
15   char cmd[1024] = {0};
16
17   while ((arg = *++argv)) {
18     while ((arg_char = *arg++)) {
19       if (strchr(UNSAFE_CHARS, arg_char))
20         strcat(cmd, "\\");
21       strncat(cmd, &arg_char, 1);
22     }
23     strcat(cmd, " ");
24   }
25   system(cmd);
26 }
27
28 int main(int argc, char **argv) {
29   int rev;
30   Window win;
31   Display *dis = XOpenDisplay(0);
32
33   XGetInputFocus(dis, &win, &rev);
34   XUnmapWindow(dis, win);
35   XFlush(dis);
36   run_command(argv);
37   XMapWindow(dis, win);
38   XCloseDisplay(dis);
39
40   (void)argc;
41   return 0;
42 }