summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--calmwm.h5
-rw-r--r--client.c9
-rw-r--r--conf.c2
-rw-r--r--cwmrc.56
4 files changed, 15 insertions, 7 deletions
diff --git a/calmwm.h b/calmwm.h
index 631aaff..cbf58a2 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -68,8 +68,9 @@
 #define	CWM_EXEC_WM		0x0002
 
 /* cycle */
-#define CWM_CYCLE		0
-#define CWM_RCYCLE		1
+#define CWM_CYCLE		0x0001
+#define CWM_RCYCLE		0x0002
+#define CWM_INGROUP		0x0004
 
 #define KBTOGROUP(X) ((X) - 1)
 
diff --git a/client.c b/client.c
index a55bd42..7a0fbc6 100644
--- a/client.c
+++ b/client.c
@@ -567,7 +567,7 @@ match:
 }
 
 void
-client_cycle(struct screen_ctx *sc, int reverse)
+client_cycle(struct screen_ctx *sc, int flags)
 {
 	struct client_ctx	*oldcc, *newcc;
 	int			 again = 1;
@@ -579,18 +579,19 @@ client_cycle(struct screen_ctx *sc, int reverse)
 		return;
 
 	if (oldcc == NULL)
-		oldcc = (reverse ? TAILQ_LAST(&sc->mruq, cycle_entry_q) :
+		oldcc = (flags & CWM_RCYCLE ? TAILQ_LAST(&sc->mruq, cycle_entry_q) :
 		    TAILQ_FIRST(&sc->mruq));
 
 	newcc = oldcc;
 	while (again) {
 		again = 0;
 
-		newcc = (reverse ? client_mruprev(newcc) :
+		newcc = (flags & CWM_RCYCLE ? client_mruprev(newcc) :
 		    client_mrunext(newcc));
 
 		/* Only cycle visible and non-ignored windows. */
-		if (newcc->flags & (CLIENT_HIDDEN|CLIENT_IGNORE))
+		if ((newcc->flags & (CLIENT_HIDDEN|CLIENT_IGNORE))
+			|| ((flags & CWM_INGROUP) && (newcc->group != oldcc->group)))
 			again = 1;
 
 		/* Is oldcc the only non-hidden window? */
diff --git a/conf.c b/conf.c
index 9f19ae2..f44113a 100644
--- a/conf.c
+++ b/conf.c
@@ -359,6 +359,8 @@ static struct {
 	{ "nogroup", kbfunc_client_nogroup, 0, {0} },
 	{ "cyclegroup", kbfunc_client_cyclegroup, 0, {.i = CWM_CYCLE} },
 	{ "rcyclegroup", kbfunc_client_cyclegroup, 0, {.i = CWM_RCYCLE} },
+	{ "cycleingroup", kbfunc_client_cycle, KBFLAG_NEEDCLIENT, {.i = CWM_CYCLE|CWM_INGROUP} },
+	{ "rcycleingroup", kbfunc_client_cycle, KBFLAG_NEEDCLIENT, {.i = CWM_RCYCLE|CWM_INGROUP} },
 	{ "grouptoggle", kbfunc_client_grouptoggle, KBFLAG_NEEDCLIENT, {0}},
 	{ "maximize", kbfunc_client_maximize, KBFLAG_NEEDCLIENT, {0} },
 	{ "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} },
diff --git a/cwmrc.5 b/cwmrc.5
index c7dbf7f..86aa0d8 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -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: June 24 2011 $
+.Dd $Mdocdate: June 25 2011 $
 .Dt CWMRC 5
 .Os
 .Sh NAME
@@ -289,6 +289,10 @@ Reverse cycle through groups.
 Forward cycle through windows.
 .It rcycle
 Reverse cycle through windows.
+.It cycleingroup
+Forward cycle through windows in current group.
+.It rcycleingroup
+Reverse cycle through windows in current group.
 .It snapdist
 Minimum distance to snap-to adjacent edge.
 .It delete