From cd47a6bf039ab6d2fb39be646f8627528f1cc705 Mon Sep 17 00:00:00 2001 From: okan Date: Thu, 20 Jul 2023 14:39:34 +0000 Subject: [PATCH] Allow cwm(1) to cycle through windows of the same window class as the active window; default key binding to M-grave, respectively Alt-Tilde, like other window managers have as well. from Simon Dassow --- app/cwm/calmwm.h | 3 ++- app/cwm/conf.c | 8 +++++++- app/cwm/cwm.1 | 8 ++++++-- app/cwm/cwmrc.5 | 8 ++++++-- app/cwm/kbfunc.c | 6 ++++-- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/cwm/calmwm.h b/app/cwm/calmwm.h index 832fafb11..d27388f20 100644 --- a/app/cwm/calmwm.h +++ b/app/cwm/calmwm.h @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: calmwm.h,v 1.378 2022/02/26 15:19:18 okan Exp $ + * $OpenBSD: calmwm.h,v 1.379 2023/07/20 14:39:34 okan Exp $ */ #ifndef _CALMWM_H_ @@ -67,6 +67,7 @@ #define CWM_CYCLE_FORWARD 0x0001 #define CWM_CYCLE_REVERSE 0x0002 #define CWM_CYCLE_INGROUP 0x0004 +#define CWM_CYCLE_INCLASS 0x0008 enum cwm_status { CWM_QUIT, diff --git a/app/cwm/conf.c b/app/cwm/conf.c index 6459aa18f..87a9924b0 100644 --- a/app/cwm/conf.c +++ b/app/cwm/conf.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: conf.c,v 1.255 2022/02/26 15:19:18 okan Exp $ + * $OpenBSD: conf.c,v 1.256 2023/07/20 14:39:34 okan Exp $ */ #include @@ -136,6 +136,10 @@ static const struct { (CWM_CYCLE_FORWARD | CWM_CYCLE_INGROUP)) }, { FUNC_SC(window-rcycle-ingroup, client_cycle, (CWM_CYCLE_REVERSE | CWM_CYCLE_INGROUP)) }, + { FUNC_SC(window-cycle-inclass, client_cycle, + (CWM_CYCLE_FORWARD | CWM_CYCLE_INCLASS)) }, + { FUNC_SC(window-rcycle-inclass, client_cycle, + (CWM_CYCLE_REVERSE | CWM_CYCLE_INCLASS)) }, { FUNC_SC(group-cycle, group_cycle, (CWM_CYCLE_FORWARD)) }, { FUNC_SC(group-rcycle, group_cycle, (CWM_CYCLE_REVERSE)) }, @@ -220,6 +224,8 @@ static const struct { { "C-slash", "menu-cmd" }, { "M-Tab", "window-cycle" }, { "MS-Tab", "window-rcycle" }, + { "M-grave", "window-cycle-inclass" }, + { "MS-grave", "window-rcycle-inclass" }, { "CM-n", "window-menu-label" }, { "CM-x", "window-close" }, { "CM-a", "group-toggle-all" }, diff --git a/app/cwm/cwm.1 b/app/cwm/cwm.1 index fc8f0ece6..107e0b4fe 100644 --- a/app/cwm/cwm.1 +++ b/app/cwm/cwm.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: cwm.1,v 1.65 2019/07/09 21:38:44 kn Exp $ +.\" $OpenBSD: cwm.1,v 1.66 2023/07/20 14:39:34 okan Exp $ .\" .\" Copyright (c) 2004,2005 Marius Aamodt Eriksen .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: July 9 2019 $ +.Dd $Mdocdate: July 20 2023 $ .Dt CWM 1 .Os .Sh NAME @@ -102,6 +102,10 @@ Label current window. Cycle through currently visible windows. .It Ic MS-Tab Reverse cycle through currently visible windows. +.It Ic M-grave +Cycle through currently visible windows of the same window class. +.It Ic MS-grave +Reverse cycle through currently visible windows of the same window class. .It Ic CM-x Close current window. .It Ic CM-[n] diff --git a/app/cwm/cwmrc.5 b/app/cwm/cwmrc.5 index 0126c3d79..1fef65620 100644 --- a/app/cwm/cwmrc.5 +++ b/app/cwm/cwmrc.5 @@ -1,4 +1,4 @@ -.\" $OpenBSD: cwmrc.5,v 1.77 2022/01/27 18:45:10 op Exp $ +.\" $OpenBSD: cwmrc.5,v 1.78 2023/07/20 14:39:34 okan Exp $ .\" .\" Copyright (c) 2004,2005 Marius Aamodt Eriksen .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: January 27 2022 $ +.Dd $Mdocdate: July 20 2023 $ .Dt CWMRC 5 .Os .Sh NAME @@ -295,6 +295,10 @@ Reverse cycle through windows. Forward cycle through windows in current group. .It window-rcycle-ingroup Reverse cycle through windows in current group. +.It window-cycle-inclass +Forward cycle through windows of the current window class. +.It window-rcycle-inclass +Reverse cycle through windows of the current window class. .It window-close Close current window. .It window-hide diff --git a/app/cwm/kbfunc.c b/app/cwm/kbfunc.c index 6cc4a6fe3..cbfa799c5 100644 --- a/app/cwm/kbfunc.c +++ b/app/cwm/kbfunc.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: kbfunc.c,v 1.173 2022/02/27 14:59:55 okan Exp $ + * $OpenBSD: kbfunc.c,v 1.174 2023/07/20 14:39:34 okan Exp $ */ #include @@ -430,7 +430,9 @@ kbfunc_client_cycle(void *ctx, struct cargs *cargs) /* Only cycle visible and non-ignored windows. */ if ((newcc->flags & (CLIENT_SKIP_CYCLE)) || ((flags & CWM_CYCLE_INGROUP) && - (newcc->gc != oldcc->gc))) + (newcc->gc != oldcc->gc)) || + ((flags & CWM_CYCLE_INCLASS) && + strcmp(newcc->res_class, oldcc->res_class) != 0)) again = 1; /* Is oldcc the only non-hidden window? */