From 30f4c30ca3ff53684282c83384796d600eae7e74 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 4 Mar 2012 07:38:11 +0000 Subject: [PATCH] Add A and I keys for vi status line editing. --- mode-key.c | 11 +++++++++-- status.c | 6 ++++++ tmux.h | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/mode-key.c b/mode-key.c index 43d07c0f..d6906d45 100644 --- a/mode-key.c +++ b/mode-key.c @@ -35,8 +35,9 @@ * * 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 and MODEKEYEDIT_SWITCHMODEAPPEND) are special-cased - * to do this. + * (MODEKEYEDIT_SWITCHMODE, MODEKEYEDIT_SWITCHMODEAPPEND, + * MODEKEYEDIT_SWITCHMODEAPPENDLINE, and MODEKEYEDIT_SWITCHMODEBEGINLINE) + * are special-cased to do this. */ /* Edit keys command strings. */ @@ -64,6 +65,8 @@ const struct mode_key_cmdstr mode_key_cmdstr_edit[] = { { MODEKEYEDIT_STARTOFLINE, "start-of-line" }, { MODEKEYEDIT_SWITCHMODE, "switch-mode" }, { MODEKEYEDIT_SWITCHMODEAPPEND, "switch-mode-append" }, + { MODEKEYEDIT_SWITCHMODEAPPENDLINE, "switch-mode-append-line" }, + { MODEKEYEDIT_SWITCHMODEBEGINLINE, "switch-mode-begin-line" }, { MODEKEYEDIT_TRANSPOSECHARS, "transpose-chars" }, { 0, NULL } @@ -151,9 +154,11 @@ const struct mode_key_entry mode_key_vi_edit[] = { { '$', 1, MODEKEYEDIT_ENDOFLINE }, { '0', 1, MODEKEYEDIT_STARTOFLINE }, + { 'A', 1, MODEKEYEDIT_SWITCHMODEAPPENDLINE }, { 'B', 1, MODEKEYEDIT_PREVIOUSSPACE }, { 'D', 1, MODEKEYEDIT_DELETETOENDOFLINE }, { 'E', 1, MODEKEYEDIT_NEXTSPACEEND }, + { 'I', 1, MODEKEYEDIT_SWITCHMODEBEGINLINE }, { 'W', 1, MODEKEYEDIT_NEXTSPACE }, { 'X', 1, MODEKEYEDIT_BACKSPACE }, { '\003' /* C-c */, 1, MODEKEYEDIT_CANCEL }, @@ -496,6 +501,8 @@ mode_key_lookup(struct mode_key_data *mdata, int key) switch (mbind->cmd) { case MODEKEYEDIT_SWITCHMODE: case MODEKEYEDIT_SWITCHMODEAPPEND: + case MODEKEYEDIT_SWITCHMODEAPPENDLINE: + case MODEKEYEDIT_SWITCHMODEBEGINLINE: mdata->mode = 1 - mdata->mode; /* FALLTHROUGH */ default: diff --git a/status.c b/status.c index af35ff64..0342b5f1 100644 --- a/status.c +++ b/status.c @@ -1038,12 +1038,18 @@ status_prompt_key(struct client *c, int key) c->flags |= CLIENT_STATUS; } break; + case MODEKEYEDIT_SWITCHMODEBEGINLINE: + c->flags |= CLIENT_STATUS; + /* FALLTHROUGH */ case MODEKEYEDIT_STARTOFLINE: if (c->prompt_index != 0) { c->prompt_index = 0; c->flags |= CLIENT_STATUS; } break; + case MODEKEYEDIT_SWITCHMODEAPPENDLINE: + c->flags |= CLIENT_STATUS; + /* FALLTHROUGH */ case MODEKEYEDIT_ENDOFLINE: if (c->prompt_index != size) { c->prompt_index = size; diff --git a/tmux.h b/tmux.h index 33e82ac0..6503d886 100644 --- a/tmux.h +++ b/tmux.h @@ -457,6 +457,8 @@ enum mode_key_cmd { MODEKEYEDIT_STARTOFLINE, MODEKEYEDIT_SWITCHMODE, MODEKEYEDIT_SWITCHMODEAPPEND, + MODEKEYEDIT_SWITCHMODEAPPENDLINE, + MODEKEYEDIT_SWITCHMODEBEGINLINE, MODEKEYEDIT_TRANSPOSECHARS, /* Menu (choice) keys. */