added grid mode on Mod1Mask g
This commit is contained in:
		
							parent
							
								
									dfd84f9bf3
								
							
						
					
					
						commit
						4641aa2925
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ | ||||
| 
 | ||||
| include config.mk | ||||
| 
 | ||||
| WMSRC = bar.c client.c cmd.c draw.c event.c kb.c mouse.c util.c wm.c | ||||
| WMSRC = bar.c client.c draw.c event.c kb.c mouse.c util.c wm.c | ||||
| WMOBJ = ${WMSRC:.c=.o} | ||||
| MENSRC = menu.c draw.c util.c | ||||
| MENOBJ = ${MENSRC:.c=.o} | ||||
|  | ||||
							
								
								
									
										70
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								client.c
									
									
									
									
									
								
							| @ -3,6 +3,7 @@ | ||||
|  * See LICENSE file for license details. | ||||
|  */ | ||||
| 
 | ||||
| #include <math.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <X11/Xatom.h> | ||||
| @ -10,6 +11,73 @@ | ||||
| #include "util.h" | ||||
| #include "wm.h" | ||||
| 
 | ||||
| void | ||||
| arrange(void *aux) | ||||
| { | ||||
| 	Client *c; | ||||
| 	int n, cols, rows, gw, gh, i, j; | ||||
|     float rt, fd; | ||||
| 
 | ||||
| 	if(!clients) | ||||
| 		return; | ||||
| 	for(n = 0, c = clients; c; c = c->next, n++); | ||||
| 	rt = sqrt(n); | ||||
| 	if(modff(rt, &fd) < 0.5) | ||||
| 		rows = floor(rt); | ||||
| 	else | ||||
| 		rows = ceil(rt); | ||||
| 	if(rows * rows < n) | ||||
| 		cols = rows + 1; | ||||
| 	else | ||||
| 		cols = rows; | ||||
| 
 | ||||
| 	gw = (sw - 1)  / cols; | ||||
| 	gh = (sh - bh - 1) / rows; | ||||
| 
 | ||||
| 	for(i = j = 0, c = clients; c; c = c->next) { | ||||
| 		c->x = i * gw; | ||||
| 		c->y = j * gh + bh; | ||||
| 		c->w = gw; | ||||
| 		c->h = gh; | ||||
| 		resize(c); | ||||
| 		if(++i == cols) { | ||||
| 			j++; | ||||
| 			i = 0; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| sel(void *aux) | ||||
| { | ||||
| 	const char *arg = aux; | ||||
| 	Client *c = NULL; | ||||
| 
 | ||||
| 	if(!arg || !stack) | ||||
| 		return; | ||||
| 	if(!strncmp(arg, "next", 5)) | ||||
| 		c = stack->snext ? stack->snext : stack; | ||||
| 	else if(!strncmp(arg, "prev", 5)) | ||||
| 		for(c = stack; c && c->snext; c = c->snext); | ||||
| 	if(!c) | ||||
| 		c = stack; | ||||
| 	raise(c); | ||||
| 	focus(c); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| kill(void *aux) | ||||
| { | ||||
| 	Client *c = stack; | ||||
| 
 | ||||
| 	if(!c) | ||||
| 		return; | ||||
| 	if(c->proto & WM_PROTOCOL_DELWIN) | ||||
| 		send_message(c->win, wm_atom[WMProtocols], wm_atom[WMDelete]); | ||||
| 	else | ||||
| 		XKillClient(dpy, c->win); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| resize_title(Client *c) | ||||
| { | ||||
| @ -113,7 +181,7 @@ focus(Client *c) | ||||
| 		draw_client(old); | ||||
| 	} | ||||
| 	XUnmapWindow(dpy, c->title); | ||||
| 	draw_client(old); | ||||
| 	draw_client(c); | ||||
| 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | ||||
| 	XFlush(dpy); | ||||
| } | ||||
|  | ||||
							
								
								
									
										52
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								cmd.c
									
									
									
									
									
								
							| @ -1,52 +0,0 @@ | ||||
| /*
 | ||||
|  * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> | ||||
|  * See LICENSE file for license details. | ||||
|  */ | ||||
| 
 | ||||
| #include "wm.h" | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| void | ||||
| run(void *aux) | ||||
| { | ||||
| 	spawn(dpy, aux); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| quit(void *aux) | ||||
| { | ||||
| 	running = False; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| sel(void *aux) | ||||
| { | ||||
| 	const char *arg = aux; | ||||
| 	Client *c = NULL; | ||||
| 
 | ||||
| 	if(!arg || !stack) | ||||
| 		return; | ||||
| 	if(!strncmp(arg, "next", 5)) | ||||
| 		c = stack->snext ? stack->snext : stack; | ||||
| 	else if(!strncmp(arg, "prev", 5)) | ||||
| 		for(c = stack; c && c->snext; c = c->snext); | ||||
| 	if(!c) | ||||
| 		c = stack; | ||||
| 	raise(c); | ||||
| 	focus(c); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| kill(void *aux) | ||||
| { | ||||
| 	Client *c = stack; | ||||
| 
 | ||||
| 	if(!c) | ||||
| 		return; | ||||
| 	if(c->proto & WM_PROTOCOL_DELWIN) | ||||
| 		send_message(c->win, wm_atom[WMProtocols], wm_atom[WMDelete]); | ||||
| 	else | ||||
| 		XKillClient(dpy, c->win); | ||||
| } | ||||
| 
 | ||||
| @ -11,7 +11,7 @@ X11LIB = /usr/X11R6/lib | ||||
| VERSION = 0.0 | ||||
| 
 | ||||
| # includes and libs
 | ||||
| LIBS = -L${PREFIX}/lib -L/usr/lib -lc -L${X11LIB} -lX11 | ||||
| LIBS = -L${PREFIX}/lib -L/usr/lib -lc -lm -L${X11LIB} -lX11 | ||||
| 
 | ||||
| # Linux/BSD
 | ||||
| CFLAGS = -g -Wall -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
 | ||||
|  | ||||
							
								
								
									
										12
									
								
								kb.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								kb.c
									
									
									
									
									
								
							| @ -13,16 +13,18 @@ static const char *term[] = { | ||||
| }; | ||||
| 
 | ||||
| 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 | ||||
| 		"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[] = { | ||||
| 	{ Mod1Mask, XK_Return, run, term }, | ||||
| 	{ Mod1Mask, XK_p, run, proglist },  | ||||
| 	{ Mod1Mask, XK_k, sel, "prev"},  | ||||
| 	{ Mod1Mask, XK_j, sel, "next"},  | ||||
| 	{ Mod1Mask | ShiftMask, XK_c, kill, NULL},  | ||||
| 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL}, | ||||
| 	{ Mod1Mask, XK_k, sel, "prev" },  | ||||
| 	{ Mod1Mask, XK_j, sel, "next" },  | ||||
| 	{ Mod1Mask, XK_g, arrange, NULL },  | ||||
| 	{ Mod1Mask | ShiftMask, XK_c, kill, NULL },  | ||||
| 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL }, | ||||
| }; | ||||
| 
 | ||||
| void | ||||
|  | ||||
							
								
								
									
										12
									
								
								wm.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								wm.c
									
									
									
									
									
								
							| @ -175,6 +175,18 @@ cleanup() | ||||
| 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| run(void *aux) | ||||
| { | ||||
| 	spawn(dpy, aux); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| quit(void *aux) | ||||
| { | ||||
| 	running = False; | ||||
| } | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|  | ||||
							
								
								
									
										13
									
								
								wm.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								wm.h
									
									
									
									
									
								
							| @ -58,12 +58,6 @@ extern Client *clients, *stack; | ||||
| /* bar.c */ | ||||
| extern void draw_bar(); | ||||
| 
 | ||||
| /* cmd.c */ | ||||
| extern void run(void *aux); | ||||
| extern void quit(void *aux); | ||||
| extern void kill(void *aux); | ||||
| extern void sel(void *aux); | ||||
| 
 | ||||
| /* client.c */ | ||||
| extern void manage(Window w, XWindowAttributes *wa); | ||||
| extern void unmanage(Client *c); | ||||
| @ -76,10 +70,15 @@ extern void update_size(Client *c); | ||||
| extern Client *gettitle(Window w); | ||||
| extern void raise(Client *c); | ||||
| extern void lower(Client *c); | ||||
| extern void kill(void *aux); | ||||
| extern void sel(void *aux); | ||||
| 
 | ||||
| /* event.c */ | ||||
| extern void discard_events(long even_mask); | ||||
| 
 | ||||
| /* grid.c */ | ||||
| extern void arrange(); | ||||
| 
 | ||||
| /* key.c */ | ||||
| extern void update_keys(); | ||||
| extern void keypress(XEvent *e); | ||||
| @ -92,3 +91,5 @@ extern void mmove(Client *c); | ||||
| extern int error_handler(Display *dpy, XErrorEvent *error); | ||||
| extern void send_message(Window w, Atom a, long value); | ||||
| extern int win_proto(Window w); | ||||
| extern void run(void *aux); | ||||
| extern void quit(void *aux); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user