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
master
okan 2023-07-20 14:39:34 +00:00
parent 508791166c
commit cd47a6bf03
5 changed files with 25 additions and 8 deletions

View File

@ -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,

View File

@ -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 <sys/types.h>
@ -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" },

View File

@ -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 <marius@monkey.org>
.\"
@ -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]

View File

@ -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 <marius@monkey.org>
.\"
@ -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

View File

@ -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 <sys/types.h>
@ -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? */