From 7af5fec0387008c71bf29ad1e394871873acaf40 Mon Sep 17 00:00:00 2001
From: Nicholas Marriott <nicm@openbsd.org>
Date: Fri, 5 Jul 2013 14:44:06 +0000
Subject: [PATCH] Whitespace nits, from Ben Boeckel.

---
 mode-key.c    | 21 ++++++++++++++-------
 status.c      | 13 ++++++++++---
 window-copy.c |  7 ++++++-
 3 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/mode-key.c b/mode-key.c
index 54abcf32..78a8bdf3 100644
--- a/mode-key.c
+++ b/mode-key.c
@@ -35,9 +35,7 @@
  *
  * vi command mode is handled by having a mode flag in the struct which allows
  * two sets of bindings to be swapped between. A couple of editing commands
- * (MODEKEYEDIT_SWITCHMODE, MODEKEYEDIT_SWITCHMODEAPPEND,
- * MODEKEYEDIT_SWITCHMODEAPPENDLINE, and MODEKEYEDIT_SWITCHMODEBEGINLINE)
- * are special-cased to do this.
+ * (any matching MODEKEYEDIT_SWITCHMODE*) are special-cased to do this.
  */
 
 /* Edit keys command strings. */
@@ -67,6 +65,9 @@ const struct mode_key_cmdstr mode_key_cmdstr_edit[] = {
 	{ MODEKEYEDIT_SWITCHMODEAPPEND, "switch-mode-append" },
 	{ MODEKEYEDIT_SWITCHMODEAPPENDLINE, "switch-mode-append-line" },
 	{ MODEKEYEDIT_SWITCHMODEBEGINLINE, "switch-mode-begin-line" },
+	{ MODEKEYEDIT_SWITCHMODECHANGELINE, "switch-mode-change-line" },
+	{ MODEKEYEDIT_SWITCHMODESUBSTITUTE, "switch-mode-substitute" },
+	{ MODEKEYEDIT_SWITCHMODESUBSTITUTELINE, "switch-mode-substitute-line" },
 	{ MODEKEYEDIT_TRANSPOSECHARS, "transpose-chars" },
 
 	{ 0, NULL }
@@ -166,9 +167,11 @@ const struct mode_key_entry mode_key_vi_edit[] = {
 	{ '0',			    1, MODEKEYEDIT_STARTOFLINE },
 	{ 'A',			    1, MODEKEYEDIT_SWITCHMODEAPPENDLINE },
 	{ 'B',			    1, MODEKEYEDIT_PREVIOUSSPACE },
+	{ 'C',			    1, MODEKEYEDIT_SWITCHMODECHANGELINE },
 	{ 'D',			    1, MODEKEYEDIT_DELETETOENDOFLINE },
 	{ 'E',			    1, MODEKEYEDIT_NEXTSPACEEND },
 	{ 'I',			    1, MODEKEYEDIT_SWITCHMODEBEGINLINE },
+	{ 'S',			    1, MODEKEYEDIT_SWITCHMODESUBSTITUTELINE },
 	{ 'W',			    1, MODEKEYEDIT_NEXTSPACE },
 	{ 'X',			    1, MODEKEYEDIT_BACKSPACE },
 	{ '\003' /* C-c */,	    1, MODEKEYEDIT_CANCEL },
@@ -185,6 +188,7 @@ const struct mode_key_entry mode_key_vi_edit[] = {
 	{ 'k',			    1, MODEKEYEDIT_HISTORYUP },
 	{ 'l',			    1, MODEKEYEDIT_CURSORRIGHT },
 	{ 'p',			    1, MODEKEYEDIT_PASTE },
+	{ 's',			    1, MODEKEYEDIT_SWITCHMODESUBSTITUTE },
 	{ 'w',			    1, MODEKEYEDIT_NEXTWORD },
 	{ 'x',			    1, MODEKEYEDIT_DELETE },
 	{ KEYC_BSPACE,		    1, MODEKEYEDIT_BACKSPACE },
@@ -227,8 +231,8 @@ const struct mode_key_entry mode_key_vi_choice[] = {
 	{ KEYC_UP | KEYC_CTRL,	    0, MODEKEYCHOICE_SCROLLUP },
 	{ KEYC_UP,		    0, MODEKEYCHOICE_UP },
 	{ ' ',			    0, MODEKEYCHOICE_TREE_TOGGLE },
-	{ KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE },
-	{ KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND },
+	{ KEYC_LEFT,		    0, MODEKEYCHOICE_TREE_COLLAPSE },
+	{ KEYC_RIGHT,		    0, MODEKEYCHOICE_TREE_EXPAND },
 	{ KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL },
 	{ KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL },
 
@@ -369,8 +373,8 @@ const struct mode_key_entry mode_key_emacs_choice[] = {
 	{ KEYC_UP | KEYC_CTRL,	    0, MODEKEYCHOICE_SCROLLUP },
 	{ KEYC_UP,		    0, MODEKEYCHOICE_UP },
 	{ ' ',			    0, MODEKEYCHOICE_TREE_TOGGLE },
-	{ KEYC_LEFT,                0, MODEKEYCHOICE_TREE_COLLAPSE },
-	{ KEYC_RIGHT,               0, MODEKEYCHOICE_TREE_EXPAND },
+	{ KEYC_LEFT,		    0, MODEKEYCHOICE_TREE_COLLAPSE },
+	{ KEYC_RIGHT,		    0, MODEKEYCHOICE_TREE_EXPAND },
 	{ KEYC_LEFT | KEYC_CTRL,    0, MODEKEYCHOICE_TREE_COLLAPSE_ALL },
 	{ KEYC_RIGHT | KEYC_CTRL,   0, MODEKEYCHOICE_TREE_EXPAND_ALL },
 
@@ -545,6 +549,9 @@ mode_key_lookup(struct mode_key_data *mdata, int key, const char **arg)
 	case MODEKEYEDIT_SWITCHMODEAPPEND:
 	case MODEKEYEDIT_SWITCHMODEAPPENDLINE:
 	case MODEKEYEDIT_SWITCHMODEBEGINLINE:
+	case MODEKEYEDIT_SWITCHMODECHANGELINE:
+	case MODEKEYEDIT_SWITCHMODESUBSTITUTE:
+	case MODEKEYEDIT_SWITCHMODESUBSTITUTELINE:
 		mdata->mode = 1 - mdata->mode;
 		/* FALLTHROUGH */
 	default:
diff --git a/status.c b/status.c
index ecfd7e58..c5572b74 100644
--- a/status.c
+++ b/status.c
@@ -142,10 +142,8 @@ status_set_window_at(struct client *c, u_int x)
 
 	x += c->wlmouse;
 	RB_FOREACH(wl, winlinks, &s->windows) {
-		if (x < wl->status_width &&
-			session_select(s, wl->idx) == 0) {
+		if (x < wl->status_width && session_select(s, wl->idx) == 0)
 			server_redraw_session(s);
-		}
 		x -= wl->status_width + 1;
 	}
 }
@@ -938,6 +936,7 @@ status_prompt_redraw(struct client *c)
 	off = 0;
 
 	memcpy(&gc, &grid_default_cell, sizeof gc);
+
 	/* Change colours for command mode. */
 	if (c->prompt_mdata.mode == 1) {
 		colour_set_fg(&gc, options_get_number(&s->options, "message-command-fg"));
@@ -1099,6 +1098,7 @@ status_prompt_key(struct client *c, int key)
 		}
 		break;
 	case MODEKEYEDIT_DELETE:
+	case MODEKEYEDIT_SWITCHMODESUBSTITUTE:
 		if (c->prompt_index != size) {
 			memmove(c->prompt_buffer + c->prompt_index,
 			    c->prompt_buffer + c->prompt_index + 1,
@@ -1107,11 +1107,13 @@ status_prompt_key(struct client *c, int key)
 		}
 		break;
 	case MODEKEYEDIT_DELETELINE:
+	case MODEKEYEDIT_SWITCHMODESUBSTITUTELINE:
 		*c->prompt_buffer = '\0';
 		c->prompt_index = 0;
 		c->flags |= CLIENT_STATUS;
 		break;
 	case MODEKEYEDIT_DELETETOENDOFLINE:
+	case MODEKEYEDIT_SWITCHMODECHANGELINE:
 		if (c->prompt_index < size) {
 			c->prompt_buffer[c->prompt_index] = '\0';
 			c->flags |= CLIENT_STATUS;
@@ -1190,6 +1192,11 @@ status_prompt_key(struct client *c, int key)
 				break;
 		}
 
+		/* Back up to the end-of-word like vi. */
+		if (options_get_number(oo, "status-keys") == MODEKEY_VI &&
+		    c->prompt_index != 0)
+			c->prompt_index--;
+
 		c->flags |= CLIENT_STATUS;
 		break;
 	case MODEKEYEDIT_PREVIOUSSPACE:
diff --git a/window-copy.c b/window-copy.c
index f5f78cf2..9d4ff20e 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1116,7 +1116,7 @@ window_copy_write_line(
 	struct options			*oo = &wp->window->options;
 	struct grid_cell		 gc;
 	char				 hdr[32];
-	size_t	 			 last, xoff = 0, size = 0;
+	size_t				 last, xoff = 0, size = 0;
 
 	window_mode_attrs(&gc, oo);
 
@@ -1894,6 +1894,7 @@ void
 window_copy_cursor_next_word_end(struct window_pane *wp, const char *separators)
 {
 	struct window_copy_mode_data	*data = wp->modedata;
+	struct options			*oo = &wp->window->options;
 	struct screen			*back_s = data->backing;
 	u_int				 px, py, xx, yy;
 	int				 expected = 1;
@@ -1927,6 +1928,10 @@ window_copy_cursor_next_word_end(struct window_pane *wp, const char *separators)
 		expected = !expected;
 	} while (expected == 0);
 
+	/* Back up to the end-of-word like vi. */
+	if (options_get_number(oo, "status-keys") == MODEKEY_VI && px != 0)
+		px--;
+
 	window_copy_update_cursor(wp, px, data->cy);
 	if (window_copy_update_selection(wp))
 		window_copy_redraw_lines(wp, data->cy, 1);