#define BGCOLOR "#000000"
#define FGCOLOR "#ffaa00"
#define BORDERCOLOR "#000000"
+#define STATUSCMD "echo -n `date` `uptime | sed 's/.*://; s/,//g'`" \
+ " `acpi | awk '{print $4}' | sed 's/,//'`"
static void
maprequest(XEvent *e)
{
-#if 0
XMapRequestEvent *ev = &e->xmaprequest;
static XWindowAttributes wa;
return;
}
- if(!client_of_win(ev->window))
- manage_client(create_client(ev->window, &wa));
-#endif
+ /*if(!client_of_win(ev->window))*/
+ manage(create_client(ev->window, &wa));
}
static void
char *maxname;
XEvent ev;
+ char buf[256];
+
+ fputs(STATUSCMD, stdout);
+ fputs("\n", stdout);
+ pipe_spawn(buf, sizeof(buf), NULL, STATUSCMD);
+ fputs(buf, stderr);
+
+ return 0;
+
/* command line args */
for(i = 1; i < argc; i++) {
if (argv[i][0] == '-')
#include "util.h"
+static char *shell = NULL;
+
void
error(char *errstr, ...) {
va_list ap;
}
void
-spawn(Display *dpy, const char *shell, const char *cmd)
+spawn(Display *dpy, const char *cmd)
{
- if(!cmd || !shell)
+ if(!shell && !(shell = getenv("SHELL")))
+ shell = "/bin/sh";
+
+ if(!cmd)
return;
if(fork() == 0) {
if(fork() == 0) {
+ setsid();
if(dpy)
close(ConnectionNumber(dpy));
- execl(shell, shell, "-c", cmd, (const char *)0);
- fprintf(stderr, "gridwm: execl %s", shell);
+ execlp(shell, "shell", "-c", cmd, NULL);
+ fprintf(stderr, "gridwm: execvp %s", cmd);
perror(" failed");
}
exit (0);
}
wait(0);
}
+
+void
+pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd)
+{
+ unsigned int l, n;
+ int pfd[2];
+
+ if(!shell && !(shell = getenv("SHELL")))
+ shell = "/bin/sh";
+
+ if(!cmd)
+ return;
+
+ if(pipe(pfd) == -1) {
+ perror("pipe");
+ exit(1);
+ }
+
+ if(fork() == 0) {
+ setsid();
+ if(dpy)
+ close(ConnectionNumber(dpy));
+ dup2(pfd[1], STDOUT_FILENO);
+ close(pfd[0]);
+ close(pfd[1]);
+ execlp(shell, "shell", "-c", cmd, NULL);
+ fprintf(stderr, "gridwm: execvp %s", cmd);
+ perror(" failed");
+ }
+ else {
+ n = 0;
+ close(pfd[1]);
+ while(l > n) {
+ if((l = read(pfd[0], buf + n, len - n)) < 1)
+ break;
+ n += l;
+ }
+ close(pfd[0]);
+ buf[n - 1] = 0;
+ }
+ wait(0);
+}
failed_assert(#a, __FILE__, __LINE__); \
} while (0)
extern void failed_assert(char *a, char *file, int line);
+void pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd);
+extern void spawn(Display *dpy, const char *cmd);
extern void swap(void **p1, void **p2);
-extern void spawn(Display *dpy, const char *shell, const char *cmd);
XRectangle rect, barrect;
Bool running = True;
-char *bartext, *shell;
+char *bartext;
int screen, sel_screen;
unsigned int lock_mask, numlock_mask;
if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
continue;
if(wa.map_state == IsViewable)
- /*manage*/;
+ manage(create_client(wins[i], &wa));
}
}
if(wins)
if(other_wm_running)
error("gridwm: another window manager is already running\n");
- if(!(shell = getenv("SHELL")))
- shell = "/bin/sh";
-
rect.x = rect.y = 0;
rect.width = DisplayWidth(dpy, screen);
rect.height = DisplayHeight(dpy, screen);
extern int screen, sel_screen;
extern unsigned int lock_mask, numlock_mask;
-extern char *bartext, *shell;
+extern char *bartext;
extern Brush brush;