added swap focus patch
This commit is contained in:
parent
cfaf290634
commit
2b78825cf1
17
dwm.c
17
dwm.c
@ -207,6 +207,7 @@ static void seturgent(Client *c, int urg);
|
|||||||
static void showhide(Client *c);
|
static void showhide(Client *c);
|
||||||
static void sigchld(int unused);
|
static void sigchld(int unused);
|
||||||
static void spawn(const Arg *arg);
|
static void spawn(const Arg *arg);
|
||||||
|
static void swapfocus();
|
||||||
static void tag(const Arg *arg);
|
static void tag(const Arg *arg);
|
||||||
static void tagmon(const Arg *arg);
|
static void tagmon(const Arg *arg);
|
||||||
static void tile(Monitor *);
|
static void tile(Monitor *);
|
||||||
@ -241,6 +242,7 @@ static void bstack(Monitor *m);
|
|||||||
static void bstackhoriz(Monitor *m);
|
static void bstackhoriz(Monitor *m);
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
|
static Client *prevclient = NULL;
|
||||||
static const char broken[] = "broken";
|
static const char broken[] = "broken";
|
||||||
static char stext[256];
|
static char stext[256];
|
||||||
static int screen;
|
static int screen;
|
||||||
@ -1672,6 +1674,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
|
void
|
||||||
tag(const Arg *arg)
|
tag(const Arg *arg)
|
||||||
{
|
{
|
||||||
@ -1789,6 +1802,7 @@ unfocus(Client *c, int setfocus)
|
|||||||
{
|
{
|
||||||
if (!c)
|
if (!c)
|
||||||
return;
|
return;
|
||||||
|
prevclient = c;
|
||||||
grabbuttons(c, 0);
|
grabbuttons(c, 0);
|
||||||
XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
|
XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
|
||||||
if (setfocus) {
|
if (setfocus) {
|
||||||
@ -2177,12 +2191,13 @@ void
|
|||||||
zoom(const Arg *arg)
|
zoom(const Arg *arg)
|
||||||
{
|
{
|
||||||
Client *c = selmon->sel;
|
Client *c = selmon->sel;
|
||||||
|
prevclient = nexttiled(selmon->clients);
|
||||||
|
|
||||||
if (!selmon->lt[selmon->sellt]->arrange
|
if (!selmon->lt[selmon->sellt]->arrange
|
||||||
|| (selmon->sel && selmon->sel->isfloating))
|
|| (selmon->sel && selmon->sel->isfloating))
|
||||||
return;
|
return;
|
||||||
if (c == nexttiled(selmon->clients))
|
if (c == nexttiled(selmon->clients))
|
||||||
if (!c || !(c = nexttiled(c->next)))
|
if (!c || !(c = prevclient = nexttiled(c->next)))
|
||||||
return;
|
return;
|
||||||
pop(c);
|
pop(c);
|
||||||
}
|
}
|
||||||
|
67
patches/dwm-swapfocus-20160731-56a31dc.diff
Normal file
67
patches/dwm-swapfocus-20160731-56a31dc.diff
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user