xembed.c - tabbed - tab interface for application supporting Xembed | |
git clone git://git.suckless.org/tabbed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
xembed.c (694B) | |
--- | |
1 /* | |
2 * See LICENSE file for copyright and license details. | |
3 */ | |
4 | |
5 #include <fcntl.h> | |
6 #include <stdio.h> | |
7 #include <stdlib.h> | |
8 #include <unistd.h> | |
9 | |
10 int | |
11 main(int argc, char *argv[]) | |
12 { | |
13 char *xembed; | |
14 int tty; | |
15 pid_t pgrp, tcpgrp; | |
16 | |
17 if (argc < 3) { | |
18 fprintf(stderr, "usage: %s flag cmd ...\n", argv[0]); | |
19 return 2; | |
20 } | |
21 | |
22 if (!(xembed = getenv("XEMBED"))) | |
23 goto noembed; | |
24 | |
25 if ((tty = open("/dev/tty", O_RDONLY)) < 0) | |
26 goto noembed; | |
27 | |
28 pgrp = getpgrp(); | |
29 tcpgrp = tcgetpgrp(tty); | |
30 | |
31 close(tty); | |
32 | |
33 if (pgrp == tcpgrp) { /* in foreground of tty */ | |
34 argv[0] = argv[2]; | |
35 argv[2] = xembed; | |
36 } else { | |
37 noembed: | |
38 argv += 2; | |
39 } | |
40 | |
41 execvp(argv[0], argv); | |
42 | |
43 perror(argv[0]); /* failed to execute */ | |
44 return 1; | |
45 } |