summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2013-07-05 14:38:24 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2013-07-05 14:38:24 +0000
commite3df838fc3bade4ba731794ba0f8ed4762b66193 (patch)
treedfc336a6cfbc9c624bee829825cdd98ae8f09180 /usr.bin
parent76cbef18617368358bd97db20ff50cb8d212c924 (diff)
Implement s, S, C mode switch commands in vi(1) mode, from Ben Boeckel.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/tmux/mode-key.c15
-rw-r--r--usr.bin/tmux/status.c5
-rw-r--r--usr.bin/tmux/tmux.h5
3 files changed, 19 insertions, 6 deletions
diff --git a/usr.bin/tmux/mode-key.c b/usr.bin/tmux/mode-key.c
index 538562c3bb9..e54cd69044c 100644
--- a/usr.bin/tmux/mode-key.c
+++ b/usr.bin/tmux/mode-key.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mode-key.c,v 1.52 2013/03/22 15:52:40 nicm Exp $ */
+/* $OpenBSD: mode-key.c,v 1.53 2013/07/05 14:38:22 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -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 },
@@ -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/usr.bin/tmux/status.c b/usr.bin/tmux/status.c
index e48d79cfb3c..c76de8c7ffc 100644
--- a/usr.bin/tmux/status.c
+++ b/usr.bin/tmux/status.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: status.c,v 1.104 2013/05/31 19:56:05 nicm Exp $ */
+/* $OpenBSD: status.c,v 1.105 2013/07/05 14:38:22 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1099,6 +1099,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 +1108,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;
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 5b7b2b7816e..581887650e6 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.414 2013/06/23 13:10:48 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.415 2013/07/05 14:38:23 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -548,6 +548,9 @@ enum mode_key_cmd {
MODEKEYEDIT_SWITCHMODEAPPEND,
MODEKEYEDIT_SWITCHMODEAPPENDLINE,
MODEKEYEDIT_SWITCHMODEBEGINLINE,
+ MODEKEYEDIT_SWITCHMODECHANGELINE,
+ MODEKEYEDIT_SWITCHMODESUBSTITUTE,
+ MODEKEYEDIT_SWITCHMODESUBSTITUTELINE,
MODEKEYEDIT_TRANSPOSECHARS,
/* Menu (choice) keys. */