sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-6.0-winview.diff (2041B)


      1 diff --git a/config.def.h b/config.def.h
      2 index 77ff358..3ba0efe 100644
      3 --- a/config.def.h
      4 +++ b/config.def.h
      5 @@ -84,6 +84,7 @@ static Key keys[] = {
      6  	TAGKEYS(                        XK_8,                      7)
      7  	TAGKEYS(                        XK_9,                      8)
      8  	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
      9 +	{ MODKEY,                       XK_o,      winview,        {0} },
     10  };
     11  
     12  /* button definitions */
     13 diff --git a/dwm.1 b/dwm.1
     14 index 5268a06..1188c82 100644
     15 --- a/dwm.1
     16 +++ b/dwm.1
     17 @@ -104,6 +104,9 @@ Increase master area size.
     18  .B Mod1\-h
     19  Decrease master area size.
     20  .TP
     21 +.B Mod1\-o
     22 +Select view of the window in focus. The list of tags to be displayed is matched to the window tag list.
     23 +.TP
     24  .B Mod1\-Return
     25  Zooms/cycles focused window to/from master area (tiled layouts only).
     26  .TP
     27 diff --git a/dwm.c b/dwm.c
     28 index 1d78655..abf944c 100644
     29 --- a/dwm.c
     30 +++ b/dwm.c
     31 @@ -247,6 +247,7 @@ static void updatewmhints(Client *c);
     32  static void view(const Arg *arg);
     33  static Client *wintoclient(Window w);
     34  static Monitor *wintomon(Window w);
     35 +static void winview(const Arg* arg);
     36  static int xerror(Display *dpy, XErrorEvent *ee);
     37  static int xerrordummy(Display *dpy, XErrorEvent *ee);
     38  static int xerrorstart(Display *dpy, XErrorEvent *ee);
     39 @@ -2080,6 +2081,26 @@ wintomon(Window w) {
     40  	return selmon;
     41  }
     42  
     43 +/* Selects for the view of the focused window. The list of tags */
     44 +/* to be displayed is matched to the focused window tag list. */
     45 +void
     46 +winview(const Arg* arg){
     47 +	Window win, win_r, win_p, *win_c;
     48 +	unsigned nc;
     49 +	int unused;
     50 +	Client* c;
     51 +	Arg a;
     52 +
     53 +	if (!XGetInputFocus(dpy, &win, &unused)) return;
     54 +	while(XQueryTree(dpy, win, &win_r, &win_p, &win_c, &nc)
     55 +	      && win_p != win_r) win = win_p;
     56 +
     57 +	if (!(c = wintoclient(win))) return;
     58 +
     59 +	a.ui = c->tags;
     60 +	view(&a);
     61 +}
     62 +
     63  /* There's no way to check accesses to destroyed windows, thus those cases are
     64   * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs
     65   * default error handler, which may call exit.  */