diff -up dwm-4.9/config.def.h dwm-4.9-nokill/config.def.h --- dwm-4.9/config.def.h 2008-04-03 22:57:01.000000000 +0200 +++ dwm-4.9-nokill/config.def.h 2008-04-12 17:49:29.000000000 +0200 @@ -14,8 +14,9 @@ const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; Rule rules[] = { - /* class instance title tags ref isfloating */ - { "Gimp", NULL, NULL, NULL, True }, + /* class instance title tags ref isfloating isimmortal*/ + { "Gimp", NULL, NULL, NULL, True , False}, + { "UXTerm", NULL, NULL, NULL, False, True}, }; /* geometries, s{x,y,w,h} and bh are already initualized here */ @@ -55,6 +56,7 @@ Key keys[] = { { MODKEY, XK_Return, zoom, NULL }, { MODKEY, XK_Tab, viewprevtag, NULL }, { MODKEY|ShiftMask, XK_c, killclient, NULL }, + { MODKEY|ControlMask|ShiftMask, XK_c, killclient, "kill_immortals"}, { MODKEY, XK_space, setlayout, NULL }, { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, { MODKEY|ControlMask, XK_space, setgeom, NULL }, diff -up dwm-4.9/dwm.c dwm-4.9-nokill/dwm.c --- dwm-4.9/dwm.c 2008-04-03 22:57:01.000000000 +0200 +++ dwm-4.9-nokill/dwm.c 2008-04-12 17:47:51.000000000 +0200 @@ -70,7 +70,7 @@ struct Client { int minax, maxax, minay, maxay; long flags; unsigned int bw, oldbw; - Bool isbanned, isfixed, isfloating, isurgent; + Bool isbanned, isfixed, isfloating, isurgent, isimmortal; Bool *tags; Client *next; Client *prev; @@ -117,6 +117,7 @@ typedef struct { const char *title; const char *tag; Bool isfloating; + Bool isimmortal; } Rule; /* function declarations */ @@ -266,6 +267,7 @@ applyrules(Client *c) { || (ch.res_name && r->instance && strstr(ch.res_name, r->instance))) { c->isfloating = r->isfloating; + c->isimmortal = r->isimmortal; if(r->tag) { c->tags[idxoftag(r->tag)] = True; matched = True; @@ -969,6 +971,8 @@ killclient(const char *arg) { if(!sel) return; + if(sel->isimmortal && !arg) + return; if(isprotodel(sel)) { ev.type = ClientMessage; ev.xclient.window = sel->win;