diff -u -r evilwm-0.99.14.orig/events.c evilwm-0.99.14/events.c
--- evilwm-0.99.14.orig/events.c	Tue Nov 26 21:09:35 2002
+++ evilwm-0.99.14/events.c	Wed May 14 10:25:16 2003
@@ -56,6 +56,9 @@
 			setmouse(c->window, c->width + c->border - 1,
 					c->height + c->border - 1);
 			break;
+		case KEY_LOCK:
+			spawnlock();
+			break;
 #ifdef VWM
 		case KEY_FIX:
 			c->vdesk = c->vdesk == STICKY ? vdesk : STICKY;
diff -u -r evilwm-0.99.14.orig/evilwm.h evilwm-0.99.14/evilwm.h
--- evilwm-0.99.14.orig/evilwm.h	Tue Nov 26 21:09:44 2002
+++ evilwm-0.99.14/evilwm.h	Wed May 14 10:25:49 2003
@@ -212,6 +212,7 @@
 #ifdef VDESK_BOTH
 void spawn_vdesk(int todesk, Client *c);
 #endif
+void spawnlock();
 
 /* void do_event_loop(); */
 int handle_xerror(Display *dpy, XErrorEvent *e);
diff -u -r evilwm-0.99.14.orig/keymap.h evilwm-0.99.14/keymap.h
--- evilwm-0.99.14.orig/keymap.h	Thu May 23 19:27:55 2002
+++ evilwm-0.99.14/keymap.h	Wed May 14 10:26:14 2003
@@ -24,5 +24,6 @@
 #ifndef KEY_KILL
 #define KEY_KILL	XK_Escape
 #endif
+#define KEY_LOCK	XK_p
 
 #endif
diff -u -r evilwm-0.99.14.orig/main.c evilwm-0.99.14/main.c
--- evilwm-0.99.14.orig/main.c	Tue Nov 26 21:08:17 2002
+++ evilwm-0.99.14/main.c	Wed May 14 10:26:35 2003
@@ -178,6 +178,7 @@
 		KEY_FIX, KEY_PREVDESK, KEY_NEXTDESK,
 		XK_1, XK_2, XK_3, XK_4, XK_5, XK_6, XK_7, XK_8,
 #endif
+		KEY_LOCK,
 		0
 	};
 	/* used in scanning windows (XQueryTree) */
diff -u -r evilwm-0.99.14.orig/misc.c evilwm-0.99.14/misc.c
--- evilwm-0.99.14.orig/misc.c	Tue Nov 26 21:45:17 2002
+++ evilwm-0.99.14/misc.c	Wed May 14 10:50:53 2003
@@ -28,6 +28,16 @@
 		wait(NULL);
 }
 
+void spawnlock() {
+	char *cmd[4];
+		
+	cmd[0] = "xscreensaver-command";
+	cmd[1] = "xscreensaver-command";
+	cmd[2] = "-lock";
+	cmd[3] = NULL;
+	spawn(cmd);
+}
+
 #ifdef VDESK_BOTH
 void spawn_vdesk(int todesk, Client *c) {
 	char *vdesk_cmd[5];
