summary refs log tree commit diff
diff options
context:
space:
mode:
authoroga <oga>2007-11-07 21:58:03 +0000
committeroga <oga>2007-11-07 21:58:03 +0000
commit699b04895988048447b0b80c2d751db4de4d18c0 (patch)
treef37bb3cbd49475d041233ae8b44355f8c1efb465
parentaf71fc930af0ef837a0a06f98cdd77d9c704a171 (diff)
downloadcwm-699b04895988048447b0b80c2d751db4de4d18c0.tar.gz
cwm-699b04895988048447b0b80c2d751db4de4d18c0.tar.xz
cwm-699b04895988048447b0b80c2d751db4de4d18c0.zip
Add support to cwm for resizing the windows using Control-Meta-[hjkl].
Please note that this remaps Control-Meta-L (label) to Control-Meta-N (name).

ok jasper@, todd@.
-rw-r--r--calmwm.h1
-rw-r--r--conf.c28
-rw-r--r--cwm.18
-rw-r--r--kbfunc.c45
4 files changed, 78 insertions, 4 deletions
diff --git a/calmwm.h b/calmwm.h
index 4e9afbf..75b968b 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -432,6 +432,7 @@ void kbfunc_client_nogroup(struct client_ctx *, void *);
 void kbfunc_client_maximize(struct client_ctx *, void *);
 void kbfunc_client_vmaximize(struct client_ctx *, void *);
 void kbfunc_client_move(struct client_ctx *, void *);
+void kbfunc_client_resize(struct client_ctx *, void *);
 void kbfunc_menu_search(struct client_ctx *, void *);
 void kbfunc_exec(struct client_ctx *, void *);
 void kbfunc_ssh(struct client_ctx *, void *);
diff --git a/conf.c b/conf.c
index 59c1b5b..007ec23 100644
--- a/conf.c
+++ b/conf.c
@@ -204,7 +204,7 @@ conf_setup(struct conf *c)
 		    XK_Tab, Mod1Mask, 0, 0);
 		conf_bindkey(c, kbfunc_client_rcycle,
 		    XK_Tab, Mod1Mask|ShiftMask, 0, 0);
-		conf_bindkey(c, kbfunc_client_label, XK_l,
+		conf_bindkey(c, kbfunc_client_label, XK_n,
 		    ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT, 0);
 		conf_bindkey(c, kbfunc_client_delete, XK_x,
 		    ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT, 0);
@@ -258,7 +258,31 @@ conf_setup(struct conf *c)
 		conf_bindkey(c, kbfunc_client_move,
 		    XK_H, Mod1Mask, KBFLAG_NEEDCLIENT,
 		    (void *)(CWM_LEFT|CWM_BIGMOVE));
-        }
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_k, ControlMask|Mod1Mask, 
+		    KBFLAG_NEEDCLIENT, (void *)CWM_UP);
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_j, ControlMask|Mod1Mask, 
+		    KBFLAG_NEEDCLIENT, (void *)CWM_DOWN);
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_l, ControlMask|Mod1Mask, 
+		    KBFLAG_NEEDCLIENT, (void *)CWM_RIGHT);
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_h, ControlMask|Mod1Mask, 
+		    KBFLAG_NEEDCLIENT, (void *)CWM_LEFT);
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_K, ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT,
+		    (void *)(CWM_UP|CWM_BIGMOVE));
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_J, ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT,
+		    (void *)(CWM_DOWN|CWM_BIGMOVE));
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_L, ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT,
+		    (void *)(CWM_RIGHT|CWM_BIGMOVE));
+		conf_bindkey(c, kbfunc_client_resize,
+		    XK_H, ControlMask|Mod1Mask, KBFLAG_NEEDCLIENT,
+		    (void *)(CWM_LEFT|CWM_BIGMOVE));
+	}
 
  	snprintf(dir_settings, sizeof(dir_settings),
 	    "%s/.calmwm/.settings", home);
diff --git a/cwm.1 b/cwm.1
index b9a67e6..7401244 100644
--- a/cwm.1
+++ b/cwm.1
@@ -63,7 +63,7 @@ Raise current window.
 Search for windows.
 .It Ic C-/
 Search for applications.
-.It Ic C-M-l
+.It Ic C-M-n
 Label current window.
 .It Ic M-Tab
 Cycle through currently visible windows.
@@ -133,13 +133,17 @@ The default behavior for new windows is to not assign any group.
 This changes the default behavior to assigning the currrently selected
 group to any newly created windows.
 .El
-.Sh WINDOW MOVEMENT
+.Sh WINDOW MOVEMENT AND RESIZING
 .Nm
 windows can be moved with the use of the keyboard through Vi-like bindings.
 M-[hjkl] moves the current window a small amount, while M-shift-[hjkl] moves
 the current window a larger amount.
 For example, to move the current window to the left a small amount, press M-h.
 To move the current window down by a larger amount, press M-shift-j.
+.Pp
+Similarly, windows may be resized with the same keybindings with the addition
+of the Control key. C-M-[hjkl] resizes the window a small amount and C-M-shift-[hjkl]
+resizes by a larger increment.
 .Sh SEARCH
 .Nm
 features the ability to search for windows by their current title,
diff --git a/kbfunc.c b/kbfunc.c
index 85fee93..32dbb28 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -67,6 +67,51 @@ kbfunc_client_move(struct client_ctx *cc, void *arg)
 	cc->ptr.x = x + mx;
 	client_ptrwarp(cc);
 }
+
+void
+kbfunc_client_resize(struct client_ctx *cc, void *arg)
+{
+	int flags,mx,my;
+	u_int amt;
+
+	mx = my = 0;
+
+	flags = (int)arg;
+	amt = MOVE_AMOUNT;
+
+	if (flags & CWM_BIGMOVE) {
+		flags -= CWM_BIGMOVE;
+		amt = amt*10;
+	}
+
+	switch(flags) {
+	case CWM_UP:
+		my -= amt;
+		break;
+	case CWM_DOWN: 
+		my += amt;
+		break;
+	case CWM_RIGHT:
+		mx += amt;
+		break;
+	case CWM_LEFT:
+		mx -= amt;
+		break;
+	}
+
+	cc->geom.height += my;
+	cc->geom.width += mx;
+	client_resize(cc);
+
+	/*
+	 * Moving the cursor while resizing is problematic. Just place
+	 * it in the middle of the window.
+	 */
+	cc->ptr.x = -1;
+	cc->ptr.y = -1;
+	client_ptrwarp(cc);
+}
+
 void
 kbfunc_client_search(struct client_ctx *scratch, void *arg)
 {