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 | 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} | WMOBJ = ${WMSRC:.c=.o} | ||||||
| MENSRC = menu.c draw.c util.c | MENSRC = menu.c draw.c util.c | ||||||
| MENOBJ = ${MENSRC:.c=.o} | MENOBJ = ${MENSRC:.c=.o} | ||||||
|  | |||||||
							
								
								
									
										70
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								client.c
									
									
									
									
									
								
							| @ -3,6 +3,7 @@ | |||||||
|  * See LICENSE file for license details. |  * See LICENSE file for license details. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
|  | #include <math.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <X11/Xatom.h> | #include <X11/Xatom.h> | ||||||
| @ -10,6 +11,73 @@ | |||||||
| #include "util.h" | #include "util.h" | ||||||
| #include "wm.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 | static void | ||||||
| resize_title(Client *c) | resize_title(Client *c) | ||||||
| { | { | ||||||
| @ -113,7 +181,7 @@ focus(Client *c) | |||||||
| 		draw_client(old); | 		draw_client(old); | ||||||
| 	} | 	} | ||||||
| 	XUnmapWindow(dpy, c->title); | 	XUnmapWindow(dpy, c->title); | ||||||
| 	draw_client(old); | 	draw_client(c); | ||||||
| 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | ||||||
| 	XFlush(dpy); | 	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 | VERSION = 0.0 | ||||||
| 
 | 
 | ||||||
| # includes and libs
 | # 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
 | # Linux/BSD
 | ||||||
| CFLAGS = -g -Wall -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
 | CFLAGS = -g -Wall -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								kb.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								kb.c
									
									
									
									
									
								
							| @ -13,7 +13,8 @@ static const char *term[] = { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const char *proglist[] = { | 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[] = { | static Key key[] = { | ||||||
| @ -21,6 +22,7 @@ static Key key[] = { | |||||||
| 	{ Mod1Mask, XK_p, run, proglist },  | 	{ Mod1Mask, XK_p, run, proglist },  | ||||||
| 	{ Mod1Mask, XK_k, sel, "prev" },  | 	{ Mod1Mask, XK_k, sel, "prev" },  | ||||||
| 	{ Mod1Mask, XK_j, sel, "next" },  | 	{ Mod1Mask, XK_j, sel, "next" },  | ||||||
|  | 	{ Mod1Mask, XK_g, arrange, NULL },  | ||||||
| 	{ Mod1Mask | ShiftMask, XK_c, kill, NULL },  | 	{ Mod1Mask | ShiftMask, XK_c, kill, NULL },  | ||||||
| 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL }, | 	{ Mod1Mask | ShiftMask, XK_q, quit, NULL }, | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								wm.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								wm.c
									
									
									
									
									
								
							| @ -175,6 +175,18 @@ cleanup() | |||||||
| 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | run(void *aux) | ||||||
|  | { | ||||||
|  | 	spawn(dpy, aux); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | quit(void *aux) | ||||||
|  | { | ||||||
|  | 	running = False; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int | int | ||||||
| main(int argc, char *argv[]) | main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								wm.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								wm.h
									
									
									
									
									
								
							| @ -58,12 +58,6 @@ extern Client *clients, *stack; | |||||||
| /* bar.c */ | /* bar.c */ | ||||||
| extern void draw_bar(); | 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 */ | /* client.c */ | ||||||
| extern void manage(Window w, XWindowAttributes *wa); | extern void manage(Window w, XWindowAttributes *wa); | ||||||
| extern void unmanage(Client *c); | extern void unmanage(Client *c); | ||||||
| @ -76,10 +70,15 @@ extern void update_size(Client *c); | |||||||
| extern Client *gettitle(Window w); | extern Client *gettitle(Window w); | ||||||
| extern void raise(Client *c); | extern void raise(Client *c); | ||||||
| extern void lower(Client *c); | extern void lower(Client *c); | ||||||
|  | extern void kill(void *aux); | ||||||
|  | extern void sel(void *aux); | ||||||
| 
 | 
 | ||||||
| /* event.c */ | /* event.c */ | ||||||
| extern void discard_events(long even_mask); | extern void discard_events(long even_mask); | ||||||
| 
 | 
 | ||||||
|  | /* grid.c */ | ||||||
|  | extern void arrange(); | ||||||
|  | 
 | ||||||
| /* key.c */ | /* key.c */ | ||||||
| extern void update_keys(); | extern void update_keys(); | ||||||
| extern void keypress(XEvent *e); | extern void keypress(XEvent *e); | ||||||
| @ -92,3 +91,5 @@ extern void mmove(Client *c); | |||||||
| extern int error_handler(Display *dpy, XErrorEvent *error); | extern int error_handler(Display *dpy, XErrorEvent *error); | ||||||
| extern void send_message(Window w, Atom a, long value); | extern void send_message(Window w, Atom a, long value); | ||||||
| extern int win_proto(Window w); | 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
	 Anselm R. Garbe
						Anselm R. Garbe