dwm-focusurgent-20221004-6.3.diff (2066B)
1 Author: Jan Christoph Ebersbach <jceb@e-jc.de> 2 URL: http://dwm.suckless.org/patches/focusurgent 3 focusurgent selects the next window having the urgent flag regardless of the tag 4 it is on. The urgent flag can be artificially set with the following xdotool 5 command on any window: xdotool selectwindow -- set_window --urgency 1 6 --- 7 Author: Zhen Xu <xuzhen165@gmail.com> 8 Update: adapt to multiple monitors. The original patch was not aware of multiple 9 monitors. I tested with two monitors but I don't have access to more monitors. 10 11 Index: clean/dwm/config.def.h 12 =================================================================== 13 --- a/config.def.h 14 +++ b/config.def.h 15 @@ -60,6 +60,7 @@ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() 16 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; 17 static const char *termcmd[] = { "st", NULL }; 18 19 +#include "focusurgent.c" 20 static Key keys[] = { 21 /* modifier key function argument */ 22 { MODKEY, XK_p, spawn, {.v = dmenucmd } }, 23 @@ -95,6 +96,7 @@ static Key keys[] = { 24 TAGKEYS( XK_8, 7) 25 TAGKEYS( XK_9, 8) 26 { MODKEY|ShiftMask, XK_q, quit, {0} }, 27 + { MODKEY, XK_u, focusurgent, {0} }, 28 }; 29 30 /* button definitions */ 31 Index: clean/dwm/focusurgent.c 32 =================================================================== 33 --- /dev/null 34 +++ b/focusurgent.c 35 @@ -0,0 +1,20 @@ 36 +static void 37 +focusurgent(const Arg *arg) { 38 + Monitor *m; 39 + Client *c; 40 + int i; 41 + for(m=mons; m; m=m->next){ 42 + for(c=m->clients; c && !c->isurgent; c=c->next); 43 + if(c) { 44 + unfocus(selmon->sel, 0); 45 + selmon = m; 46 + for(i=0; i < LENGTH(tags) && !((1 << i) & c->tags); i++); 47 + if(i < LENGTH(tags)) { 48 + const Arg a = {.ui = 1 << i}; 49 + view(&a); 50 + focus(c); 51 + warp(c); 52 + } 53 + } 54 + } 55 +}