68 lines
1.7 KiB
Diff
68 lines
1.7 KiB
Diff
Author: Jan Christoph Ebersbach <jceb@e-jc.de>
|
|
URL: http://dwm.suckless.org/patches/swapfocus
|
|
This patch makes it possible to switch focus with one single shortcut (alt-s)
|
|
instead of having to think if you should use alt-j or alt-k for reaching the
|
|
last used window.
|
|
|
|
Index: dwm/dwm.c
|
|
===================================================================
|
|
--- dwm/dwm.c.orig
|
|
+++ dwm/dwm.c
|
|
@@ -207,6 +207,7 @@ static void setup(void);
|
|
static void showhide(Client *c);
|
|
static void sigchld(int unused);
|
|
static void spawn(const Arg *arg);
|
|
+static void swapfocus();
|
|
static void tag(const Arg *arg);
|
|
static void tagmon(const Arg *arg);
|
|
static void tile(Monitor *);
|
|
@@ -236,6 +237,7 @@ static int xerrorstart(Display *dpy, XEr
|
|
static void zoom(const Arg *arg);
|
|
|
|
/* variables */
|
|
+static Client *prevclient = NULL;
|
|
static const char broken[] = "broken";
|
|
static char stext[256];
|
|
static int screen;
|
|
@@ -1645,6 +1647,17 @@ spawn(const Arg *arg)
|
|
}
|
|
|
|
void
|
|
+swapfocus()
|
|
+{
|
|
+ Client *c;
|
|
+ for(c = selmon->clients; c && c != prevclient; c = c->next) ;
|
|
+ if(c == prevclient) {
|
|
+ focus(prevclient);
|
|
+ restack(prevclient->mon);
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
tag(const Arg *arg)
|
|
{
|
|
if (selmon->sel && arg->ui & TAGMASK) {
|
|
@@ -1743,6 +1756,7 @@ unfocus(Client *c, int setfocus)
|
|
{
|
|
if (!c)
|
|
return;
|
|
+ prevclient = c;
|
|
grabbuttons(c, 0);
|
|
XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
|
|
if (setfocus) {
|
|
@@ -2109,12 +2123,13 @@ void
|
|
zoom(const Arg *arg)
|
|
{
|
|
Client *c = selmon->sel;
|
|
+ prevclient = nexttiled(selmon->clients);
|
|
|
|
if (!selmon->lt[selmon->sellt]->arrange
|
|
|| (selmon->sel && selmon->sel->isfloating))
|
|
return;
|
|
if (c == nexttiled(selmon->clients))
|
|
- if (!c || !(c = nexttiled(c->next)))
|
|
+ if (!c || !(c = prevclient = nexttiled(c->next)))
|
|
return;
|
|
pop(c);
|
|
}
|