diff -ru evilwm-0.99.18.orig/Makefile evilwm-0.99.18/Makefile
--- evilwm-0.99.18.orig/Makefile	Thu Jun  2 12:22:49 2005
+++ evilwm-0.99.18/Makefile	Fri Jul 29 05:05:23 2005
@@ -4,6 +4,7 @@
 # Edit this line if you don't want evilwm to install under /usr.
 # Note that $(DESTDIR) is used by the Debian build process.
 prefix = $(DESTDIR)/usr
+prefix = /home/geni/usr/local
 
 XROOT    = /usr/X11R6
 INCLUDES = -I$(XROOT)/include
@@ -91,10 +92,10 @@
 
 doinstall:
 	if [ -f evilwm.exe ]; then mv evilwm.exe evilwm; fi
-	mkdir -p $(prefix)/bin $(prefix)/share/man/man1
+	mkdir -p $(prefix)/bin $(prefix)/man/man1
 	install -s evilwm $(prefix)/bin
-	install evilwm.1 $(prefix)/share/man/man1
-	#gzip -9 $(prefix)/share/man/man1/evilwm.1
+	install evilwm.1 $(prefix)/man/man1
+	#gzip -9 $(prefix)/man/man1/evilwm.1
 
 install: doinstall
 
diff -ru evilwm-0.99.18.orig/client.c evilwm-0.99.18/client.c
--- evilwm-0.99.18.orig/client.c	Fri May  6 05:05:07 2005
+++ evilwm-0.99.18/client.c	Sat Jul 30 03:10:53 2005
@@ -194,6 +194,9 @@
 			bpixel = c == newcurrent ? c->screen->fc.pixel : c->screen->bg.pixel;
 		else
 #endif
+		if (c->hidden)
+			bpixel = c == newcurrent ? c->screen->hc.pixel : c->screen->bg.pixel;
+		else
 			bpixel = c == newcurrent ? c->screen->fg.pixel : c->screen->bg.pixel;
 		XSetWindowBackground(dpy, c->parent, bpixel);
 		XClearWindow(dpy, c->parent);
diff -ru evilwm-0.99.18.orig/events.c evilwm-0.99.18/events.c
--- evilwm-0.99.18.orig/events.c	Tue Apr 26 14:55:19 2005
+++ evilwm-0.99.18/events.c	Fri Aug 12 00:32:48 2005
@@ -9,6 +9,7 @@
 
 static void handle_key_event(XKeyEvent *e) {
 	Client *c = find_client(e->window);
+	static Client *curr = NULL;
 	KeySym key = XKeycodeToKeysym(dpy,e->keycode,0);
 
 	if (!c)
@@ -33,6 +34,8 @@
 			{ c->x = c->border; c->y = DisplayHeight(dpy, c->screen->screen)-c->height-c->border; } if (0)
 		case KEY_BOTTOMRIGHT:
 			{ c->x = DisplayWidth(dpy, c->screen->screen)-c->width-c->border; c->y = DisplayHeight(dpy, c->screen->screen)-c->height-c->border; }
+			if (opt_snap)
+				snap_client(c);
 			moveresize(c);
 			setmouse(c->window, c->width + c->border - 1,
 					c->height + c->border - 1);
@@ -61,13 +64,39 @@
 			client_update_current(c, current);
 			break;
 #endif
+		case KEY_HIDE:
+			hide(c);
+			c->hidden = 1;
+			c->temp_shown = 0;
+			break;
+		case KEY_UNHIDE:
+			curr = NULL;
+			c->hidden = 0;
+			c->temp_shown = 0;
+			client_update_current(c, current);
+			break;
+		case KEY_RESIZELEFT:
+			c->width -= 16; if (0)
+		case KEY_RESIZEDOWN:
+			c->height += 16; if (0)
+		case KEY_RESIZEUP:
+			c->height -= 16; if (0)
+		case KEY_RESIZERIGHT:
+			c->width += 16;
+			moveresize(c);
+			setmouse(c->window, c->width + c->border - 1,
+					c->height + c->border - 1);
+			break;
+		case KEY_RAISE:
+			XRaiseWindow(dpy, c->parent);
+			break;
 		}
 	}
 	switch(key) {
 		case KEY_NEW:
 			spawn(opt_term); break;
 		case KEY_NEXT:
-			next();
+			next(0);
 			break;
 #ifdef VWM
 		case XK_1: case XK_2: case XK_3: case XK_4:
@@ -83,6 +112,16 @@
 				switch_vdesk(vdesk + 1);
 			break;
 #endif
+		case KEY_HIDDENNEXT:
+			if(curr && curr->temp_shown){
+				hide(curr);
+				curr->temp_shown = 0;
+			}
+			next(1);
+			curr = current;
+			if(curr && curr->hidden)
+				curr->temp_shown = 1;
+			break;
 	}
 }
 
diff -ru evilwm-0.99.18.orig/evilwm.1 evilwm-0.99.18/evilwm.1
--- evilwm-0.99.18.orig/evilwm.1	Tue Apr 26 14:55:31 2005
+++ evilwm-0.99.18/evilwm.1	Fri Aug 12 00:25:47 2005
@@ -10,6 +10,8 @@
 .I foreground
 .B ] [ \-bg
 .I background
+.B ] [ \-hc
+.I hidden foreground
 .B ] [ \-bw
 .I borderwidth
 .B ] [ \-snap
@@ -24,7 +26,7 @@
 .I geometry
 .B ] [ \-v
 .I vdesk
-.B ]
+.B ] [ \-nc ]
 .B ]... [ \-V ]
 .SH DESCRIPTION
 .B evilwm
@@ -53,32 +55,40 @@
 Spawn new terminal.
 .IP Escape
 Delete current window.
-.IP Insert
+.IP 9
 Lower current window.
+.IP 0
+Raise current window.
 .IP "H, J, K, L"
 Move window left, down, up or right (16 pixels).
 .IP "Y, U, B, N"
 Move window to top-left, top-right, bottom-left or
 bottom-right of screen.
+.IP "Left, Right, Up, Down"
+Resize window.
 .IP I
 Show information about current window.
-.IP Equals
+.IP Minus
 Maximise current window vertically (toggle).
-.IP X
+.IP Equals
 Maximise current window (toggle).
 .PP
 If compiled with virtual desktop support, these functions are also available: 
 .IP F
 Fix or unfix current window.
+.IP O
+Hide current window.
+.IP P
+Unhide temporarily shown current window.
 .IP "1--8"
 Switch virtual desktop.
-.IP Left
+.IP Comma
 Previous virtual desktop.
-.IP Right
+.IP Period
 Next virtual desktop.
 .PP
 In addition to the above, Alt+Tab can be used to cycle through windows
-on screen.
+on screen. Alt+Backslash is used to switch between hidden windows.
 .PP
 To make 
 .B evilwm
@@ -93,6 +103,8 @@
 frame colour of currently active window.
 .IP "\-bg background"
 frame colour of inactive windows.
+.IP "\-hc hidden foreground"
+frame colour of hidden windows shown temporarily.
 .IP "\-bw borderwidth"
 width of window borders in pixels.
 .IP "\-snap num"
@@ -126,6 +138,8 @@
 specify a default virtual desktop for applications matching the last
 .I \-app.
 Use 0 for vdesk to set window as sticky.
+.IP "\-nc"
+make applications matching the last -app not appear in Alt+Tab cycle.
 .IP "\-V"
 print version number.
 .SH BUGS
diff -ru evilwm-0.99.18.orig/evilwm.h evilwm-0.99.18/evilwm.h
--- evilwm-0.99.18.orig/evilwm.h	Tue Apr 26 15:28:58 2005
+++ evilwm-0.99.18/evilwm.h	Fri Aug 12 00:30:22 2005
@@ -24,6 +24,7 @@
 #define DEF_BG		"grey50"
 #define DEF_BW		1
 #define DEF_FC		"blue"
+#define DEF_HC		"red"
 #define SPACE		3
 #ifdef DEBIAN
 #define DEF_TERM	"x-terminal-emulator"
@@ -88,9 +89,9 @@
 	Colormap def_cmap;
 	GC invert_gc;
 #ifdef VWM
-	XColor fg, bg, fc;
+	XColor fg, bg, hc, fc;
 #else
-	XColor fg, bg;
+	XColor fg, bg, hc;
 #endif
 	char *display;
 };
@@ -123,6 +124,9 @@
 #ifdef VWM
 	int		vdesk;
 #endif /* def VWM */
+	int		not_in_cycle;
+	int		hidden;
+	int		temp_shown;
 };
 
 typedef struct Application Application;
@@ -135,6 +139,7 @@
 #ifdef VWM
 	int vdesk;
 #endif
+	int not_in_cycle;
 	Application *next;
 };
 
@@ -166,6 +171,7 @@
 extern const char	*opt_fc;
 extern int		vdesk;
 #endif
+extern const char	*opt_hc;
 #ifdef SNAP
 extern int		opt_snap;
 #endif
@@ -227,9 +233,10 @@
 void show_info(Client *c, KeySym key);
 void sweep(Client *c);
 void unhide(Client *c, int raise_win);
-void next(void);
+void next(int hidden);
 #ifdef VWM
 void hide(Client *c);
 void switch_vdesk(int v);
 #endif /* def VWM */
 ScreenInfo *find_screen(Window root);
+void snap_client(Client *c);
diff -ru evilwm-0.99.18.orig/keymap.h evilwm-0.99.18/keymap.h
--- evilwm-0.99.18.orig/keymap.h	Wed Apr  6 12:05:06 2005
+++ evilwm-0.99.18/keymap.h	Fri Aug 12 00:21:32 2005
@@ -25,4 +25,24 @@
 #define KEY_KILL	XK_Escape
 #endif
 
+#define KEY_HIDE	XK_o
+#define KEY_UNHIDE	XK_p
+#define KEY_HIDDENNEXT	XK_backslash
+#define KEY_RESIZELEFT	XK_Left
+#define KEY_RESIZERIGHT	XK_Right
+#define KEY_RESIZEDOWN	XK_Down
+#define KEY_RESIZEUP	XK_Up
+#define KEY_RAISE	XK_0
+
+#undef KEY_LOWER
+#undef KEY_MAXVERT
+#undef KEY_MAX
+#undef KEY_PREVDESK
+#undef KEY_NEXTDESK
+#define KEY_LOWER	XK_9
+#define KEY_MAXVERT	XK_minus
+#define KEY_MAX		XK_equal
+#define KEY_PREVDESK	XK_comma
+#define KEY_NEXTDESK	XK_period
+
 #endif
diff -ru evilwm-0.99.18.orig/main.c evilwm-0.99.18/main.c
--- evilwm-0.99.18.orig/main.c	Tue Apr 26 14:59:31 2005
+++ evilwm-0.99.18/main.c	Thu Aug 11 23:43:20 2005
@@ -36,6 +36,7 @@
 const char	*opt_fc = DEF_FC;
 int		vdesk = KEY_TO_VDESK(XK_1);
 #endif
+const char	*opt_hc = DEF_HC;
 #ifdef SNAP
 int		opt_snap = 0;
 #endif
@@ -73,6 +74,8 @@
 		else if (!strcmp(argv[i], "-fc") && i+1<argc)
 			opt_fc = argv[++i];
 #endif
+		else if (!strcmp(argv[i], "-hc") && i+1<argc)
+			opt_hc = argv[++i];
 		else if (!strcmp(argv[i], "-bw") && i+1<argc)
 			opt_bw = atoi(argv[++i]);
 		else if (!strcmp(argv[i], "-term") && i+1<argc) {
@@ -91,6 +94,7 @@
 #ifdef VWM
 			new->vdesk = -1;
 #endif
+			new->not_in_cycle = 0;
 			if ((tmp = strchr(argv[i], '/'))) {
 				*(tmp++) = 0;
 			}
@@ -117,6 +121,9 @@
 			if (head_app)
 				head_app->vdesk = atoi(argv[i]);
 #endif
+		} else if (!strcmp(argv[i], "-nc")) {
+			if (head_app)
+				head_app->not_in_cycle = 1;
 		} else if (!strcmp(argv[i], "-mask1") && i+1<argc) {
 			i++;
 			grabmask1 = parse_modifiers(argv[i]);
@@ -180,6 +187,9 @@
 		KEY_FIX, KEY_PREVDESK, KEY_NEXTDESK,
 		XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8,
 #endif
+		KEY_HIDE, KEY_UNHIDE, KEY_HIDDENNEXT,
+		KEY_RESIZELEFT, KEY_RESIZERIGHT, KEY_RESIZEDOWN, KEY_RESIZEUP,
+		KEY_RAISE,
 		0
 	};
 	/* used in scanning windows (XQueryTree) */
@@ -277,6 +287,7 @@
 #ifdef VWM
 		XAllocNamedColor(dpy, DefaultColormap(dpy, i), opt_fc, &screens[i].fc, &dummy);
 #endif
+		XAllocNamedColor(dpy, DefaultColormap(dpy, i), opt_hc, &screens[i].hc, &dummy);
 
 		screens[i].invert_gc = XCreateGC(dpy, screens[i].root, GCFunction | GCSubwindowMode | GCLineWidth | GCFont, &gv);
 
diff -ru evilwm-0.99.18.orig/new.c evilwm-0.99.18/new.c
--- evilwm-0.99.18.orig/new.c	Thu Jun  2 01:40:04 2005
+++ evilwm-0.99.18/new.c	Sat Jul 30 03:48:29 2005
@@ -126,6 +126,10 @@
 	}
 #endif
 
+	c->not_in_cycle = 0;
+	c->hidden = 0;
+	c->temp_shown = 0;
+
 	/* Read instance/class information for client and check against list
 	 * built with -app options */
 	class = XAllocClassHint();
@@ -158,6 +162,7 @@
 					hide(c);
 				}
 #endif
+				c->not_in_cycle = a->not_in_cycle;
 			}
 			a = a->next;
 		}
diff -ru evilwm-0.99.18.orig/screen.c evilwm-0.99.18/screen.c
--- evilwm-0.99.18.orig/screen.c	Mon May  9 05:08:29 2005
+++ evilwm-0.99.18/screen.c	Fri Aug 12 00:29:50 2005
@@ -186,7 +186,7 @@
 	return b;
 }
 
-static void snap_client(Client *c) {
+void snap_client(Client *c) {
 	int dx, dy;
 	Client *ci;
 
@@ -340,7 +340,9 @@
 	}
 }
 
+/*
 #ifdef VWM
+*/
 void hide(Client *c) {
 	if (c) {
 		c->ignore_unmap++;
@@ -349,7 +351,9 @@
 		set_wm_state(c, IconicState);
 	}
 }
+/*
 #endif
+*/
 
 void unhide(Client *c, int raise_win) {
 	XMapWindow(dpy, c->window);
@@ -357,7 +361,7 @@
 	set_wm_state(c, NormalState);
 }
 
-void next(void) {
+void next(int hidden) {
 	Client *newc = current;
 	do {
 		if (newc) {
@@ -369,14 +373,17 @@
 			newc = head_client;
 		if (!newc)
 			return;
-		if (newc == current)
+		if (newc == current){
+			if(hidden)
+				break;
 			return;
-	}
+		}
+	} while(newc->not_in_cycle || (hidden ? !newc->hidden :
+				newc->hidden && !newc->temp_shown)
 #ifdef VWM
-	while (newc->vdesk != vdesk && newc->vdesk != STICKY);
-#else
-	while (0);
+	|| (newc->vdesk != vdesk && newc->vdesk != STICKY)
 #endif
+	);
 	if (!newc)
 		return;
 	unhide(newc, RAISE);
