added bar event timer
This commit is contained in:
		
							parent
							
								
									3399650076
								
							
						
					
					
						commit
						586f66331d
					
				
							
								
								
									
										12
									
								
								bar.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								bar.c
									
									
									
									
									
								
							| @ -5,12 +5,22 @@ | ||||
| 
 | ||||
| #include "wm.h" | ||||
| 
 | ||||
| static const char *status[] = { | ||||
| 	"sh", "-c", "echo -n `date` `uptime | sed 's/.*://; s/,//g'`" | ||||
| 		" `acpi | awk '{print $4}' | sed 's/,//'`", 0 \ | ||||
| }; | ||||
| 
 | ||||
| void | ||||
| draw_bar() | ||||
| { | ||||
| 	static char buf[1024]; | ||||
| 
 | ||||
| 	buf[0] = 0; | ||||
| 	pipe_spawn(buf, sizeof(buf), dpy, (char **)status); | ||||
| 
 | ||||
| 	brush.rect = barrect; | ||||
| 	brush.rect.x = brush.rect.y = 0; | ||||
| 	draw(dpy, &brush, False, 0); | ||||
| 	draw(dpy, &brush, False, buf); | ||||
| 
 | ||||
| 	XCopyArea(dpy, brush.drawable, barwin, brush.gc, 0, 0, barrect.width, | ||||
| 			barrect.height, 0, 0); | ||||
|  | ||||
							
								
								
									
										9
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								client.c
									
									
									
									
									
								
							| @ -122,6 +122,8 @@ unmanage(Client *c) | ||||
| 	XSetErrorHandler(error_handler); | ||||
| 	XUngrabServer(dpy); | ||||
| 	flush_events(EnterWindowMask); | ||||
| 	if(stack) | ||||
| 		focus(stack); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @ -135,3 +137,10 @@ getclient(Window w) | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| draw_client(Client *c) | ||||
| { | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | ||||
							
								
								
									
										10
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								cmd.c
									
									
									
									
									
								
							| @ -5,22 +5,22 @@ | ||||
| 
 | ||||
| #include "wm.h" | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| void | ||||
| run(char *arg) | ||||
| run(void *aux) | ||||
| { | ||||
| 	spawn(dpy, arg); | ||||
| 	spawn(dpy, aux); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| quit(char *arg) | ||||
| quit(void *aux) | ||||
| { | ||||
| 	fputs("quit\n", stderr); | ||||
| 	running = False; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| kill(char *arg) | ||||
| kill(void *aux) | ||||
| { | ||||
| 	Client *c = stack; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										12
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								config.h
									
									
									
									
									
								
							| @ -3,16 +3,8 @@ | ||||
|  * See LICENSE file for license details. | ||||
|  */ | ||||
| 
 | ||||
| #define FONT		"-*-terminus-medium-*-*-*-14-*-*-*-*-*-iso10646-*" | ||||
| #define FONT		"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" | ||||
| #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/,//'`" | ||||
| #define PLCMD		"`ls -lL /bin /sbin /usr/bin /usr/local/bin 2>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | gridmenu`" | ||||
| 
 | ||||
| #define KEYS		\ | ||||
| 	{ Mod1Mask, XK_Return, run, "xterm -u8 -bg black -fg white -fn '-*-terminus-medium-*-*-*-14-*-*-*-*-*-iso10646-*'" }, \ | ||||
| 	{ Mod1Mask, XK_p, run, PLCMD }, \ | ||||
| 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL}, | ||||
| 
 | ||||
| #define STATUSDELAY 1 /* milliseconds */ | ||||
|  | ||||
							
								
								
									
										16
									
								
								key.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								key.c
									
									
									
									
									
								
							| @ -7,8 +7,20 @@ | ||||
| 
 | ||||
| #include <X11/keysym.h> | ||||
| 
 | ||||
| static const char *term[] = {  | ||||
| 	"xterm", "-u8", "-bg", "black", "-fg", "white", "-fn", | ||||
| 	"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0  | ||||
| }; | ||||
| 
 | ||||
| static const char *proglist[] = { | ||||
| 		"sh", "-c", "exec `ls -lL /bin /sbin /usr/bin /usr/local/bin 2>/dev/null | awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | gridmenu`", 0 | ||||
| }; | ||||
| 
 | ||||
| static Key key[] = { | ||||
| 	KEYS | ||||
| 	{ Mod1Mask, XK_Return, run, term }, | ||||
| 	{ Mod1Mask, XK_p, run, proglist },  | ||||
| 	{ Mod1Mask | ShiftMask, XK_c, kill, NULL},  | ||||
| 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL}, | ||||
| }; | ||||
| 
 | ||||
| void | ||||
| @ -37,7 +49,7 @@ keypress(XEvent *e) | ||||
| 	for(i = 0; i < len; i++) | ||||
| 		if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { | ||||
| 			if(key[i].func) | ||||
| 				key[i].func(key[i].arg); | ||||
| 				key[i].func(key[i].aux); | ||||
| 			return; | ||||
| 		} | ||||
| } | ||||
|  | ||||
							
								
								
									
										25
									
								
								util.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								util.c
									
									
									
									
									
								
							| @ -14,8 +14,6 @@ | ||||
| 
 | ||||
| #include "util.h" | ||||
| 
 | ||||
| static char *shell = NULL; | ||||
| 
 | ||||
| void | ||||
| error(char *errstr, ...) { | ||||
| 	va_list ap; | ||||
| @ -85,21 +83,17 @@ swap(void **p1, void **p2) | ||||
| } | ||||
| 
 | ||||
| void | ||||
| spawn(Display *dpy, const char *cmd) | ||||
| spawn(Display *dpy, char *argv[]) | ||||
| { | ||||
| 	if(!shell && !(shell = getenv("SHELL"))) | ||||
| 		shell = "/bin/sh"; | ||||
| 
 | ||||
| 	if(!cmd) | ||||
| 	if(!argv || !argv[0]) | ||||
| 		return; | ||||
| 	if(fork() == 0) { | ||||
| 		if(fork() == 0) { | ||||
| 			if(dpy) | ||||
| 				close(ConnectionNumber(dpy)); | ||||
| 			setsid(); | ||||
| 			fprintf(stderr, "gridwm: execlp %s %s -c %s", shell, shell, cmd); | ||||
| 			execlp(shell, shell, "-c", cmd, NULL); | ||||
| 			fprintf(stderr, "gridwm: execlp %s", cmd); | ||||
| 			execvp(argv[0], argv); | ||||
| 			fprintf(stderr, "gridwm: execvp %s", argv[0]); | ||||
| 			perror(" failed"); | ||||
| 		} | ||||
| 		exit (0); | ||||
| @ -108,15 +102,12 @@ spawn(Display *dpy, const char *cmd) | ||||
| } | ||||
| 
 | ||||
| void | ||||
| pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) | ||||
| pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[]) | ||||
| { | ||||
| 	unsigned int l, n; | ||||
| 	int pfd[2]; | ||||
| 
 | ||||
| 	if(!shell && !(shell = getenv("SHELL"))) | ||||
| 		shell = "/bin/sh"; | ||||
| 
 | ||||
| 	if(!cmd) | ||||
| 	if(!argv || !argv[0]) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(pipe(pfd) == -1) { | ||||
| @ -131,8 +122,8 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) | ||||
| 		dup2(pfd[1], STDOUT_FILENO); | ||||
| 		close(pfd[0]); | ||||
| 		close(pfd[1]); | ||||
| 		execlp(shell, shell, "-c", cmd, NULL); | ||||
| 		fprintf(stderr, "gridwm: execlp %s", cmd); | ||||
| 		execvp(argv[0], argv); | ||||
| 		fprintf(stderr, "gridwm: execvp %s", argv[0]); | ||||
| 		perror(" failed"); | ||||
| 	} | ||||
| 	else { | ||||
|  | ||||
							
								
								
									
										12
									
								
								util.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								util.h
									
									
									
									
									
								
							| @ -9,12 +9,16 @@ extern void *emallocz(unsigned int size); | ||||
| extern void *emalloc(unsigned int size); | ||||
| extern void *erealloc(void *ptr, unsigned int size); | ||||
| extern char *estrdup(const char *str); | ||||
| #define eassert(a) do { \ | ||||
| #define eassert(a) \ | ||||
| 	do { \ | ||||
| 		if(!(a)) \ | ||||
| 			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 pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[]); | ||||
| extern void spawn(Display *dpy, char *argv[]); | ||||
| extern void swap(void **p1, void **p2); | ||||
| unsigned char *getselection(unsigned long offset, unsigned long *len, unsigned long *remain); | ||||
| extern unsigned char *getselection(unsigned long offset, unsigned long *len, | ||||
| 		unsigned long *remain); | ||||
| extern unsigned int tokenize(char **result, unsigned int reslen, | ||||
| 		char *str, char delim); | ||||
|  | ||||
							
								
								
									
										33
									
								
								wm.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								wm.c
									
									
									
									
									
								
							| @ -3,10 +3,15 @@ | ||||
|  * See LICENSE file for license details. | ||||
|  */ | ||||
| 
 | ||||
| #include <errno.h> | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #include <sys/types.h> | ||||
| #include <sys/time.h> | ||||
| 
 | ||||
| #include <X11/cursorfont.h> | ||||
| #include <X11/Xatom.h> | ||||
| #include <X11/Xproto.h> | ||||
| @ -160,12 +165,9 @@ startup_error_handler(Display *dpy, XErrorEvent *error) | ||||
| static void | ||||
| cleanup() | ||||
| { | ||||
| 	/*
 | ||||
| 	Client *c; | ||||
| 	for(c=client; c; c=c->next) | ||||
| 		reparent_client(c, root, c->sel->rect.x, c->sel->rect.y); | ||||
| 	while(clients) | ||||
| 		unmanage(clients); | ||||
| 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | ||||
| 	*/ | ||||
| } | ||||
| 
 | ||||
| int | ||||
| @ -176,6 +178,11 @@ main(int argc, char *argv[]) | ||||
| 	unsigned int mask; | ||||
| 	Window w; | ||||
| 	XEvent ev; | ||||
| 	fd_set fds; | ||||
| 	struct timeval t, timeout = { | ||||
| 		.tv_usec = 0, | ||||
| 		.tv_sec = STATUSDELAY, | ||||
| 	}; | ||||
| 
 | ||||
| 	/* command line args */ | ||||
| 	for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { | ||||
| @ -264,9 +271,19 @@ main(int argc, char *argv[]) | ||||
| 	scan_wins(); | ||||
| 
 | ||||
| 	while(running) { | ||||
| 		XNextEvent(dpy, &ev); | ||||
| 		if(handler[ev.type]) | ||||
| 			(handler[ev.type]) (&ev); /* call handler */ | ||||
| 		if(XPending(dpy) > 0) { | ||||
| 			XNextEvent(dpy, &ev); | ||||
| 			if(handler[ev.type]) | ||||
| 				(handler[ev.type]) (&ev); /* call handler */ | ||||
| 			continue; | ||||
| 		} | ||||
| 		FD_ZERO(&fds); | ||||
| 		FD_SET(ConnectionNumber(dpy), &fds); | ||||
| 		t = timeout; | ||||
| 		if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0) | ||||
| 			continue; | ||||
| 		else if(errno != EINTR) | ||||
| 			draw_bar(); | ||||
| 	} | ||||
| 
 | ||||
| 	cleanup(); | ||||
|  | ||||
							
								
								
									
										9
									
								
								wm.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								wm.h
									
									
									
									
									
								
							| @ -42,8 +42,8 @@ struct Client { | ||||
| struct Key { | ||||
| 	unsigned long mod; | ||||
| 	KeySym keysym; | ||||
| 	void (*func)(char *arg); | ||||
| 	char *arg; | ||||
| 	void (*func)(void *aux); | ||||
| 	void *aux; | ||||
| }; | ||||
| 
 | ||||
| extern Display *dpy; | ||||
| @ -64,8 +64,9 @@ extern Client *clients, *stack; | ||||
| extern void draw_bar(); | ||||
| 
 | ||||
| /* cmd.c */ | ||||
| extern void run(char *arg); | ||||
| extern void quit(char *arg); | ||||
| extern void run(void *aux); | ||||
| extern void quit(void *aux); | ||||
| extern void kill(void *aux); | ||||
| 
 | ||||
| /* client.c */ | ||||
| extern void manage(Window w, XWindowAttributes *wa); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user