diff options
-rw-r--r-- | cmd-bind-key.c | 51 | ||||
-rw-r--r-- | cmd-command-prompt.c | 10 | ||||
-rw-r--r-- | cmd-list-keys.c | 24 | ||||
-rw-r--r-- | cmd-send-keys.c | 36 | ||||
-rw-r--r-- | key-bindings.c | 136 | ||||
-rw-r--r-- | mode-key.c | 561 | ||||
-rw-r--r-- | server-client.c | 33 | ||||
-rw-r--r-- | status.c | 2 | ||||
-rw-r--r-- | tmux.1 | 200 | ||||
-rw-r--r-- | tmux.h | 64 | ||||
-rw-r--r-- | window-choose.c | 16 | ||||
-rw-r--r-- | window-clock.c | 8 | ||||
-rw-r--r-- | window-copy.c | 854 | ||||
-rw-r--r-- | window.c | 1 |
14 files changed, 806 insertions, 1190 deletions
diff --git a/cmd-bind-key.c b/cmd-bind-key.c index bcc179c3..69314788 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -36,8 +36,8 @@ const struct cmd_entry cmd_bind_key_entry = { .name = "bind-key", .alias = "bind", - .args = { "cnrR:t:T:", 1, -1 }, - .usage = "[-cnr] [-t mode-table] [-R repeat-count] [-T key-table] key " + .args = { "cnrt:T:", 1, -1 }, + .usage = "[-cnr] [-t mode-table] [-T key-table] key " "command [arguments]", .flags = 0, @@ -97,12 +97,10 @@ static enum cmd_retval cmd_bind_key_mode_table(struct cmd *self, struct cmd_q *cmdq, key_code key) { struct args *args = self->args; - const char *tablename, *arg; + const char *tablename; const struct mode_key_table *mtab; struct mode_key_binding *mbind, mtmp; enum mode_key_cmd cmd; - char *cause; - u_int repeat; tablename = args_get(args, 't'); if ((mtab = mode_key_findtable(tablename)) == NULL) { @@ -116,44 +114,9 @@ cmd_bind_key_mode_table(struct cmd *self, struct cmd_q *cmdq, key_code key) return (CMD_RETURN_ERROR); } - switch (cmd) { - case MODEKEYCOPY_APPENDSELECTION: - case MODEKEYCOPY_COPYSELECTION: - case MODEKEYCOPY_STARTNAMEDBUFFER: - if (args->argc == 2) - arg = NULL; - else { - arg = args->argv[2]; - if (strcmp(arg, "-x") != 0) { - cmdq_error(cmdq, "unknown argument"); - return (CMD_RETURN_ERROR); - } - } - break; - case MODEKEYCOPY_COPYPIPE: - if (args->argc != 3) { - cmdq_error(cmdq, "no argument given"); - return (CMD_RETURN_ERROR); - } - arg = args->argv[2]; - break; - default: - if (args->argc != 2) { - cmdq_error(cmdq, "no argument allowed"); - return (CMD_RETURN_ERROR); - } - arg = NULL; - break; - } - - repeat = 1; - if (args_has(args, 'R')) { - repeat = args_strtonum(args, 'R', 1, SHRT_MAX, &cause); - if (cause != NULL) { - cmdq_error(cmdq, "repeat count %s", cause); - free(cause); - return (CMD_RETURN_ERROR); - } + if (args->argc != 2) { + cmdq_error(cmdq, "no argument allowed"); + return (CMD_RETURN_ERROR); } mtmp.key = key; @@ -164,8 +127,6 @@ cmd_bind_key_mode_table(struct cmd *self, struct cmd_q *cmdq, key_code key) mbind->mode = mtmp.mode; RB_INSERT(mode_key_tree, mtab->tree, mbind); } - mbind->repeat = repeat; mbind->cmd = cmd; - mbind->arg = arg != NULL ? xstrdup(arg) : NULL; return (CMD_RETURN_NORMAL); } diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index a2fc1278..09ab9813 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -38,8 +38,8 @@ const struct cmd_entry cmd_command_prompt_entry = { .name = "command-prompt", .alias = NULL, - .args = { "I:p:t:", 0, 1 }, - .usage = "[-I inputs] [-p prompts] " CMD_TARGET_CLIENT_USAGE " " + .args = { "1I:p:t:", 0, 1 }, + .usage = "[-1] [-I inputs] [-p prompts] " CMD_TARGET_CLIENT_USAGE " " "[template]", .tflag = CMD_CLIENT, @@ -67,6 +67,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_q *cmdq) struct client *c = cmdq->state.c; char *prompt, *ptr, *input = NULL; size_t n; + int flags; if (c->prompt_string != NULL) return (CMD_RETURN_NORMAL); @@ -108,8 +109,11 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_q *cmdq) input = strsep(&cdata->next_input, ","); } + flags = 0; + if (args_has(args, '1')) + flags |= PROMPT_SINGLE; status_prompt_set(c, prompt, input, cmd_command_prompt_callback, - cmd_command_prompt_free, cdata, 0); + cmd_command_prompt_free, cdata, flags); free(prompt); return (CMD_RETURN_NORMAL); diff --git a/cmd-list-keys.c b/cmd-list-keys.c index d5f516fa..85cb4744 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -138,8 +138,7 @@ cmd_list_keys_table(struct cmd *self, struct cmd_q *cmdq) const char *tablename, *key, *cmdstr, *mode; const struct mode_key_table *mtab; struct mode_key_binding *mbind; - char repeat[16]; - int width, keywidth, repeatwidth, any_mode; + int width, keywidth, any_mode; tablename = args_get(args, 't'); if ((mtab = mode_key_findtable(tablename)) == NULL) { @@ -147,7 +146,7 @@ cmd_list_keys_table(struct cmd *self, struct cmd_q *cmdq) return (CMD_RETURN_ERROR); } - keywidth = repeatwidth = 0; + keywidth = 0; any_mode = 0; RB_FOREACH(mbind, mode_key_tree, mtab->tree) { key = key_string_lookup_key(mbind->key); @@ -158,13 +157,6 @@ cmd_list_keys_table(struct cmd *self, struct cmd_q *cmdq) width = strlen(key); if (width > keywidth) keywidth = width; - - if (mbind->repeat != 1) { - snprintf(repeat, sizeof repeat, "%u", mbind->repeat); - width = strlen(repeat); - if (width > repeatwidth) - repeatwidth = width; - } } RB_FOREACH(mbind, mode_key_tree, mtab->tree) { @@ -173,20 +165,12 @@ cmd_list_keys_table(struct cmd *self, struct cmd_q *cmdq) mode = ""; if (mbind->mode != 0) mode = "c"; - snprintf(repeat, sizeof repeat, "%u", mbind->repeat); cmdstr = mode_key_tostring(mtab->cmdstr, mbind->cmd); if (cmdstr != NULL) { - cmdq_print(cmdq, - "bind-key -%st %s%s%s%*s %*s %s%s%s%s", + cmdq_print(cmdq, "bind-key -%st %s%s %*s %s", mode, any_mode && *mode == '\0' ? " " : "", mtab->name, - mbind->repeat != 1 ? " -R " : - (repeatwidth == 0 ? "" : " "), - repeatwidth, mbind->repeat != 1 ? repeat : "", - (int)keywidth, key, cmdstr, - mbind->arg != NULL ? " \"" : "", - mbind->arg != NULL ? mbind->arg : "", - mbind->arg != NULL ? "\"": ""); + (int)keywidth, key, cmdstr); } } diff --git a/cmd-send-keys.c b/cmd-send-keys.c index 9d6b41d8..e3b8d6e4 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -33,8 +33,8 @@ const struct cmd_entry cmd_send_keys_entry = { .name = "send-keys", .alias = "send", - .args = { "lRMt:", 0, -1 }, - .usage = "[-lRM] " CMD_TARGET_PANE_USAGE " key ...", + .args = { "lXRMN:t:", 0, -1 }, + .usage = "[-lXRM] [-N repeat-count] " CMD_TARGET_PANE_USAGE " key ...", .tflag = CMD_PANE, @@ -59,12 +59,44 @@ static enum cmd_retval cmd_send_keys_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; + struct client *c = cmdq->state.c; struct window_pane *wp = cmdq->state.tflag.wp; struct session *s = cmdq->state.tflag.s; struct mouse_event *m = &cmdq->item->mouse; const u_char *keystr; int i, literal; key_code key; + u_int np; + char *cause = NULL; + + if (args_has(args, 'N')) { + if (wp->mode == NULL || wp->mode->command == NULL) { + cmdq_error(cmdq, "not in a mode"); + return (CMD_RETURN_ERROR); + } + np = args_strtonum(args, 'N', 1, UINT_MAX, &cause); + if (cause != NULL) { + cmdq_error(cmdq, "prefix %s", cause); + free(cause); + return (CMD_RETURN_ERROR); + } + wp->modeprefix = np; + } + + if (args_has(args, 'X')) { + if (wp->mode == NULL || wp->mode->command == NULL) { + cmdq_error(cmdq, "not in a mode"); + return (CMD_RETURN_ERROR); + } + if (!m->valid) + wp->mode->command(wp, c, s, args, NULL); + else + wp->mode->command(wp, c, s, args, m); + return (CMD_RETURN_NORMAL); + } + + if (args_has(args, 'N')) /* only with -X */ + return (CMD_RETURN_NORMAL); if (args_has(args, 'M')) { wp = cmd_mouse_pane(m, &s, NULL); diff --git a/key-bindings.c b/key-bindings.c index 0d13385d..384a9f8f 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -232,6 +232,142 @@ key_bindings_init(void) "bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'", "bind -n MouseDown3Pane if-shell -Ft= '#{mouse_any_flag}' 'select-pane -t=; send-keys -M' 'select-pane -mt='", "bind -n WheelUpPane if-shell -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'", + + "bind -Tcopy-mode C-Space send -X begin-selection", + "bind -Tcopy-mode C-a send -X start-of-line", + "bind -Tcopy-mode C-c send -X cancel", + "bind -Tcopy-mode C-e send -X end-of-line", + "bind -Tcopy-mode C-f send -X cursor-right", + "bind -Tcopy-mode C-g send -X clear-selection", + "bind -Tcopy-mode C-k send -X copy-end-of-line", + "bind -Tcopy-mode C-n send -X cursor-down", + "bind -Tcopy-mode C-p send -X cursor-up", + "bind -Tcopy-mode C-r command-prompt -p'search up' \"send -X search-backward '%%'\"", + "bind -Tcopy-mode C-s command-prompt -p'search down' \"send -X search-forward '%%'\"", + "bind -Tcopy-mode C-v send -X page-down", + "bind -Tcopy-mode C-w send -X copy-selection-and-cancel", + "bind -Tcopy-mode Escape send -X cancel", + "bind -Tcopy-mode Space send -X page-down", + "bind -Tcopy-mode , send -X jump-reverse", + "bind -Tcopy-mode \\; send -X jump-again", + "bind -Tcopy-mode F command-prompt -1p'jump backward' \"send -X jump-backward '%%'\"", + "bind -Tcopy-mode N send -X search-reverse", + "bind -Tcopy-mode R send -X rectangle-toggle", + "bind -Tcopy-mode T command-prompt -1p'jump to backward' \"send -X jump-to-backward '%%'\"", + "bind -Tcopy-mode f command-prompt -1p'jump forward' \"send -X jump-forward '%%'\"", + "bind -Tcopy-mode g command-prompt -p'goto line' \"send -X goto-line '%%'\"", + "bind -Tcopy-mode n send -X search-again", + "bind -Tcopy-mode q send -X cancel", + "bind -Tcopy-mode t command-prompt -1p'jump to forward' \"send -X jump-to-forward '%%'\"", + "bind -Tcopy-mode MouseDrag1Pane send -X begin-selection", + "bind -Tcopy-mode MouseDragEnd1Pane send -X copy-selection-and-cancel", + "bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up", + "bind -Tcopy-mode WheelDownPane send -N5 -X scroll-down", + "bind -Tcopy-mode NPage send -X page-down", + "bind -Tcopy-mode PPage send -X page-up", + "bind -Tcopy-mode Up send -X cursor-up", + "bind -Tcopy-mode Down send -X cursor-down", + "bind -Tcopy-mode Left send -X cursor-left", + "bind -Tcopy-mode Right send -X cursor-right", + "bind -Tcopy-mode M-1 command-prompt -p'repeat' -I1 \"send -N '%%'\"", + "bind -Tcopy-mode M-2 command-prompt -p'repeat' -I2 \"send -N '%%'\"", + "bind -Tcopy-mode M-3 command-prompt -p'repeat' -I3 \"send -N '%%'\"", + "bind -Tcopy-mode M-4 command-prompt -p'repeat' -I4 \"send -N '%%'\"", + "bind -Tcopy-mode M-5 command-prompt -p'repeat' -I5 \"send -N '%%'\"", + "bind -Tcopy-mode M-6 command-prompt -p'repeat' -I6 \"send -N '%%'\"", + "bind -Tcopy-mode M-7 command-prompt -p'repeat' -I7 \"send -N '%%'\"", + "bind -Tcopy-mode M-8 command-prompt -p'repeat' -I8 \"send -N '%%'\"", + "bind -Tcopy-mode M-9 command-prompt -p'repeat' -I9 \"send -N '%%'\"", + "bind -Tcopy-mode M-< send -X history-top", + "bind -Tcopy-mode M-> send -X history-bottom", + "bind -Tcopy-mode M-R send -X top-line", + "bind -Tcopy-mode M-b send -X previous-word", + "bind -Tcopy-mode M-f send -X next-word-end", + "bind -Tcopy-mode M-m send -X back-to-indentation", + "bind -Tcopy-mode M-r send -X middle-line", + "bind -Tcopy-mode M-v send -X page-up", + "bind -Tcopy-mode M-w send -X copy-selection-and-cancel", + "bind -Tcopy-mode M-{ send -X previous-paragraph", + "bind -Tcopy-mode M-} send -X next-paragraph", + "bind -Tcopy-mode M-Up send -X halfpage-up", + "bind -Tcopy-mode M-Down send -X halfpage-down", + "bind -Tcopy-mode C-Up send -X scroll-up", + "bind -Tcopy-mode C-Down send -X scroll-down", + + "bind -Tcopy-mode-vi C-b send -X page-up", + "bind -Tcopy-mode-vi C-c send -X cancel", + "bind -Tcopy-mode-vi C-d send -X halfpage-down", + "bind -Tcopy-mode-vi C-e send -X scroll-down", + "bind -Tcopy-mode-vi C-f send -X page-down", + "bind -Tcopy-mode-vi C-h send -X cursor-left", + "bind -Tcopy-mode-vi C-j send -X copy-selection-and-cancel", + "bind -Tcopy-mode-vi Enter send -X copy-selection-and-cancel", + "bind -Tcopy-mode-vi C-u send -X halfpage-up", + "bind -Tcopy-mode-vi C-v send -X rectangle-toggle", + "bind -Tcopy-mode-vi C-y send -X scroll-up", + "bind -Tcopy-mode-vi Escape send -X clear-selection", + "bind -Tcopy-mode-vi Space send -X begin-selection", + "bind -Tcopy-mode-vi '$' send -X end-of-line", + "bind -Tcopy-mode-vi , send -X jump-reverse", + "bind -Tcopy-mode-vi / command-prompt -p'search down' \"send -X search-forward '%%'\"", + "bind -Tcopy-mode-vi 0 send -X start-of-line", + "bind -Tcopy-mode-vi 1 command-prompt -p'repeat' -I1 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 2 command-prompt -p'repeat' -I2 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 3 command-prompt -p'repeat' -I3 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 4 command-prompt -p'repeat' -I4 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 5 command-prompt -p'repeat' -I5 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 6 command-prompt -p'repeat' -I6 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 7 command-prompt -p'repeat' -I7 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 8 command-prompt -p'repeat' -I8 \"send -N '%%'\"", + "bind -Tcopy-mode-vi 9 command-prompt -p'repeat' -I9 \"send -N '%%'\"", + "bind -Tcopy-mode-vi : command-prompt -p'goto line' \"send -X goto-line '%%'\"", + "bind -Tcopy-mode-vi \\; send -X jump-again" + "bind -Tcopy-mode-vi ? command-prompt -p'search up' \"send -X search-backward '%%'\"", + "bind -Tcopy-mode-vi A send -X append-selection-and-cancel", + "bind -Tcopy-mode-vi B send -X previous-space", + "bind -Tcopy-mode-vi D send -X copy-end-of-line", + "bind -Tcopy-mode-vi E send -X next-space-end", + "bind -Tcopy-mode-vi F command-prompt -1p'jump backward' \"send -X jump-backward '%%'\"", + "bind -Tcopy-mode-vi G send -X history-bottom", + "bind -Tcopy-mode-vi H send -X top-line", + "bind -Tcopy-mode-vi J send -X scroll-down", + "bind -Tcopy-mode-vi K send -X scroll-up", + "bind -Tcopy-mode-vi L send -X bottom-line", + "bind -Tcopy-mode-vi M send -X middle-line", + "bind -Tcopy-mode-vi N send -X search-reverse", + "bind -Tcopy-mode-vi T command-prompt -1p'jump to backward' \"send -X jump-to-backward '%%'\"", + "bind -Tcopy-mode-vi V send -X select-line", + "bind -Tcopy-mode-vi W send -X next-space", + "bind -Tcopy-mode-vi ^ send -X back-to-indentation", + "bind -Tcopy-mode-vi b send -X previous-word", + "bind -Tcopy-mode-vi e send -X next-word-end", + "bind -Tcopy-mode-vi f command-prompt -1p'jump forward' \"send -X jump-forward '%%'\"", + "bind -Tcopy-mode-vi g send -X history-top", + "bind -Tcopy-mode-vi h send -X cursor-left", + "bind -Tcopy-mode-vi j send -X cursor-down", + "bind -Tcopy-mode-vi k send -X cursor-up", + "bind -Tcopy-mode-vi l send -X cursor-right", + "bind -Tcopy-mode-vi n send -X search-again", + "bind -Tcopy-mode-vi o send -X other-end", + "bind -Tcopy-mode-vi q send -X cancel", + "bind -Tcopy-mode-vi t command-prompt -1p'jump to forward' \"send -X jump-to-forward '%%'\"", + "bind -Tcopy-mode-vi v send -X rectangle-toggle", + "bind -Tcopy-mode-vi w send -X next-word", + "bind -Tcopy-mode-vi { send -X previous-paragraph", + "bind -Tcopy-mode-vi } send -X next-paragraph", + "bind -Tcopy-mode-vi MouseDrag1Pane send -X begin-selection", + "bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-selection-and-cancel", + "bind -Tcopy-mode-vi WheelUpPane send -N5 -X scroll-up", + "bind -Tcopy-mode-vi WheelDownPane send -N5 -X scroll-down", + "bind -Tcopy-mode-vi BSpace send -X cursor-left", + "bind -Tcopy-mode-vi NPage send -X page-down", + "bind -Tcopy-mode-vi PPage send -X page-up", + "bind -Tcopy-mode-vi Up send -X cursor-up", + "bind -Tcopy-mode-vi Down send -X cursor-down", + "bind -Tcopy-mode-vi Left send -X cursor-left", + "bind -Tcopy-mode-vi Right send -X cursor-right", + "bind -Tcopy-mode-vi C-Up send -X scroll-up", + "bind -Tcopy-mode-vi C-Down send -X scroll-down", }; u_int i; struct cmd_list *cmdlist; @@ -50,7 +50,6 @@ struct mode_key_entry { */ int mode; enum mode_key_cmd cmd; - u_int repeat; }; /* Edit keys command strings. */ @@ -113,416 +112,207 @@ static const struct mode_key_cmdstr mode_key_cmdstr_choice[] = { { 0, NULL } }; -/* Copy keys command strings. */ -static const struct mode_key_cmdstr mode_key_cmdstr_copy[] = { - { MODEKEYCOPY_APPENDSELECTION, "append-selection" }, - { MODEKEYCOPY_BACKTOINDENTATION, "back-to-indentation" }, - { MODEKEYCOPY_BOTTOMLINE, "bottom-line" }, - { MODEKEYCOPY_CANCEL, "cancel" }, - { MODEKEYCOPY_CLEARSELECTION, "clear-selection" }, - { MODEKEYCOPY_COPYPIPE, "copy-pipe" }, - { MODEKEYCOPY_COPYLINE, "copy-line" }, - { MODEKEYCOPY_COPYENDOFLINE, "copy-end-of-line" }, - { MODEKEYCOPY_COPYSELECTION, "copy-selection" }, - { MODEKEYCOPY_DOWN, "cursor-down" }, - { MODEKEYCOPY_ENDOFLINE, "end-of-line" }, - { MODEKEYCOPY_GOTOLINE, "goto-line" }, - { MODEKEYCOPY_HALFPAGEDOWN, "halfpage-down" }, - { MODEKEYCOPY_HALFPAGEUP, "halfpage-up" }, - { MODEKEYCOPY_HISTORYBOTTOM, "history-bottom" }, - { MODEKEYCOPY_HISTORYTOP, "history-top" }, - { MODEKEYCOPY_JUMP, "jump-forward" }, - { MODEKEYCOPY_JUMPAGAIN, "jump-again" }, - { MODEKEYCOPY_JUMPREVERSE, "jump-reverse" }, - { MODEKEYCOPY_JUMPBACK, "jump-backward" }, - { MODEKEYCOPY_JUMPTO, "jump-to-forward" }, - { MODEKEYCOPY_JUMPTOBACK, "jump-to-backward" }, - { MODEKEYCOPY_LEFT, "cursor-left" }, - { MODEKEYCOPY_RECTANGLETOGGLE, "rectangle-toggle" }, - { MODEKEYCOPY_MIDDLELINE, "middle-line" }, - { MODEKEYCOPY_NEXTPAGE, "page-down" }, - { MODEKEYCOPY_NEXTPARAGRAPH, "next-paragraph" }, - { MODEKEYCOPY_NEXTSPACE, "next-space" }, - { MODEKEYCOPY_NEXTSPACEEND, "next-space-end" }, - { MODEKEYCOPY_NEXTWORD, "next-word" }, - { MODEKEYCOPY_NEXTWORDEND, "next-word-end" }, - { MODEKEYCOPY_OTHEREND, "other-end" }, - { MODEKEYCOPY_PREVIOUSPAGE, "page-up" }, - { MODEKEYCOPY_PREVIOUSPARAGRAPH, "previous-paragraph" }, - { MODEKEYCOPY_PREVIOUSSPACE, "previous-space" }, - { MODEKEYCOPY_PREVIOUSWORD, "previous-word" }, - { MODEKEYCOPY_RIGHT, "cursor-right" }, - { MODEKEYCOPY_SCROLLDOWN, "scroll-down" }, - { MODEKEYCOPY_SCROLLUP, "scroll-up" }, - { MODEKEYCOPY_SEARCHAGAIN, "search-again" }, - { MODEKEYCOPY_SEARCHDOWN, "search-forward" }, - { MODEKEYCOPY_SEARCHREVERSE, "search-reverse" }, - { MODEKEYCOPY_SEARCHUP, "search-backward" }, - { MODEKEYCOPY_SELECTLINE, "select-line" }, - { MODEKEYCOPY_STARTNAMEDBUFFER, "start-named-buffer" }, - { MODEKEYCOPY_STARTNUMBERPREFIX, "start-number-prefix" }, - { MODEKEYCOPY_STARTOFLINE, "start-of-line" }, - { MODEKEYCOPY_STARTSELECTION, "begin-selection" }, - { MODEKEYCOPY_TOPLINE, "top-line" }, - { MODEKEYCOPY_UP, "cursor-up" }, - - { 0, NULL } -}; - /* vi editing keys. */ static const struct mode_key_entry mode_key_vi_edit[] = { - { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL, 1 }, - { '\010' /* C-h */, 0, MODEKEYEDIT_BACKSPACE, 1 }, - { '\011' /* Tab */, 0, MODEKEYEDIT_COMPLETE, 1 }, - { '\025' /* C-u */, 0, MODEKEYEDIT_DELETELINE, 1 }, - { '\027' /* C-w */, 0, MODEKEYEDIT_DELETEWORD, 1 }, - { '\033' /* Escape */, 0, MODEKEYEDIT_SWITCHMODE, 1 }, - { '\n', 0, MODEKEYEDIT_ENTER, 1 }, - { '\r', 0, MODEKEYEDIT_ENTER, 1 }, - { KEYC_BSPACE, 0, MODEKEYEDIT_BACKSPACE, 1 }, - { KEYC_DC, 0, MODEKEYEDIT_DELETE, 1 }, - { KEYC_DOWN, 0, MODEKEYEDIT_HISTORYDOWN, 1 }, - { KEYC_LEFT, 0, MODEKEYEDIT_CURSORLEFT, 1 }, - { KEYC_RIGHT, 0, MODEKEYEDIT_CURSORRIGHT, 1 }, - { KEYC_UP, 0, MODEKEYEDIT_HISTORYUP, 1 }, - { KEYC_HOME, 0, MODEKEYEDIT_STARTOFLINE, 1 }, - { KEYC_END, 0, MODEKEYEDIT_ENDOFLINE, 1 }, - - { '$', 1, MODEKEYEDIT_ENDOFLINE, 1 }, - { '0', 1, MODEKEYEDIT_STARTOFLINE, 1 }, - { 'A', 1, MODEKEYEDIT_SWITCHMODEAPPENDLINE, 1 }, - { 'B', 1, MODEKEYEDIT_PREVIOUSSPACE, 1 }, - { 'C', 1, MODEKEYEDIT_SWITCHMODECHANGELINE, 1 }, - { 'D', 1, MODEKEYEDIT_DELETETOENDOFLINE, 1 }, - { 'E', 1, MODEKEYEDIT_NEXTSPACEEND, 1 }, - { 'I', 1, MODEKEYEDIT_SWITCHMODEBEGINLINE, 1 }, - { 'S', 1, MODEKEYEDIT_SWITCHMODESUBSTITUTELINE, 1 }, - { 'W', 1, MODEKEYEDIT_NEXTSPACE, 1 }, - { 'X', 1, MODEKEYEDIT_BACKSPACE, 1 }, - { '\003' /* C-c */, 1, MODEKEYEDIT_CANCEL, 1 }, - { '\010' /* C-h */, 1, MODEKEYEDIT_BACKSPACE, 1 }, - { '\n', 1, MODEKEYEDIT_ENTER, 1 }, - { '\r', 1, MODEKEYEDIT_ENTER, 1 }, - { '^', 1, MODEKEYEDIT_STARTOFLINE, 1 }, - { 'a', 1, MODEKEYEDIT_SWITCHMODEAPPEND, 1 }, - { 'b', 1, MODEKEYEDIT_PREVIOUSWORD, 1 }, - { 'd', 1, MODEKEYEDIT_DELETELINE, 1 }, - { 'e', 1, MODEKEYEDIT_NEXTWORDEND, 1 }, - { 'h', 1, MODEKEYEDIT_CURSORLEFT, 1 }, - { 'i', 1, MODEKEYEDIT_SWITCHMODE, 1 }, - { 'j', 1, MODEKEYEDIT_HISTORYDOWN, 1 }, - { 'k', 1, MODEKEYEDIT_HISTORYUP, 1 }, - { 'l', 1, MODEKEYEDIT_CURSORRIGHT, 1 }, - { 'p', 1, MODEKEYEDIT_PASTE, 1 }, - { 's', 1, MODEKEYEDIT_SWITCHMODESUBSTITUTE, 1 }, - { 'w', 1, MODEKEYEDIT_NEXTWORD, 1 }, - { 'x', 1, MODEKEYEDIT_DELETE, 1 }, - { KEYC_BSPACE, 1, MODEKEYEDIT_BACKSPACE, 1 }, - { KEYC_DC, 1, MODEKEYEDIT_DELETE, 1 }, - { KEYC_DOWN, 1, MODEKEYEDIT_HISTORYDOWN, 1 }, - { KEYC_LEFT, 1, MODEKEYEDIT_CURSORLEFT, 1 }, - { KEYC_RIGHT, 1, MODEKEYEDIT_CURSORRIGHT, 1 }, - { KEYC_UP, 1, MODEKEYEDIT_HISTORYUP, 1 }, - - { 0, -1, 0, 1 } + { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL }, + { '\010' /* C-h */, 0, MODEKEYEDIT_BACKSPACE }, + { '\011' /* Tab */, 0, MODEKEYEDIT_COMPLETE }, + { '\025' /* C-u */, 0, MODEKEYEDIT_DELETELINE }, + { '\027' /* C-w */, 0, MODEKEYEDIT_DELETEWORD }, + { '\033' /* Escape */, 0, MODEKEYEDIT_SWITCHMODE }, + { '\n', 0, MODEKEYEDIT_ENTER }, + { '\r', 0, MODEKEYEDIT_ENTER }, + { KEYC_BSPACE, 0, MODEKEYEDIT_BACKSPACE }, + { KEYC_DC, 0, MODEKEYEDIT_DELETE }, + { KEYC_DOWN, 0, MODEKEYEDIT_HISTORYDOWN }, + { KEYC_LEFT, 0, MODEKEYEDIT_CURSORLEFT }, + { KEYC_RIGHT, 0, MODEKEYEDIT_CURSORRIGHT }, + { KEYC_UP, 0, MODEKEYEDIT_HISTORYUP }, + { KEYC_HOME, 0, MODEKEYEDIT_STARTOFLINE }, + { KEYC_END, 0, MODEKEYEDIT_ENDOFLINE }, + + { '$', 1, MODEKEYEDIT_ENDOFLINE }, + { '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 }, + { '\010' /* C-h */, 1, MODEKEYEDIT_BACKSPACE }, + { '\n', 1, MODEKEYEDIT_ENTER }, + { '\r', 1, MODEKEYEDIT_ENTER }, + { '^', 1, MODEKEYEDIT_STARTOFLINE }, + { 'a', 1, MODEKEYEDIT_SWITCHMODEAPPEND }, + { 'b', 1, MODEKEYEDIT_PREVIOUSWORD }, + { 'd', 1, MODEKEYEDIT_DELETELINE }, + { 'e', 1, MODEKEYEDIT_NEXTWORDEND }, + { 'h', 1, MODEKEYEDIT_CURSORLEFT }, + { 'i', 1, MODEKEYEDIT_SWITCHMODE }, + { 'j', 1, MODEKEYEDIT_HISTORYDOWN }, + { '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 }, + { KEYC_DC, 1, MODEKEYEDIT_DELETE }, + { KEYC_DOWN, 1, MODEKEYEDIT_HISTORYDOWN }, + { KEYC_LEFT, 1, MODEKEYEDIT_CURSORLEFT }, + { KEYC_RIGHT, 1, MODEKEYEDIT_CURSORRIGHT }, + { KEYC_UP, 1, MODEKEYEDIT_HISTORYUP }, + + { 0, -1, 0 } }; struct mode_key_tree mode_key_tree_vi_edit; /* vi choice selection keys. */ static const struct mode_key_entry mode_key_vi_choice[] = { - { '0' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '1' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '2' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '3' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '4' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '5' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '6' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '7' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '8' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '9' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '\002' /* C-b */, 0, MODEKEYCHOICE_PAGEUP, 1 }, - { '\003' /* C-c */, 0, MODEKEYCHOICE_CANCEL, 1 }, - { '\005' /* C-e */, 0, MODEKEYCHOICE_SCROLLDOWN, 1 }, - { '\006' /* C-f */, 0, MODEKEYCHOICE_PAGEDOWN, 1 }, - { '\031' /* C-y */, 0, MODEKEYCHOICE_SCROLLUP, 1 }, - { '\n', 0, MODEKEYCHOICE_CHOOSE, 1 }, - { '\r', 0, MODEKEYCHOICE_CHOOSE, 1 }, - { 'j', 0, MODEKEYCHOICE_DOWN, 1 }, - { 'k', 0, MODEKEYCHOICE_UP, 1 }, - { 'q', 0, MODEKEYCHOICE_CANCEL, 1 }, - { KEYC_HOME, 0, MODEKEYCHOICE_STARTOFLIST, 1 }, - { 'g', 0, MODEKEYCHOICE_STARTOFLIST, 1 }, - { 'H', 0, MODEKEYCHOICE_TOPLINE, 1 }, - { 'L', 0, MODEKEYCHOICE_BOTTOMLINE, 1 }, - { 'G', 0, MODEKEYCHOICE_ENDOFLIST, 1 }, - { KEYC_END, 0, MODEKEYCHOICE_ENDOFLIST, 1 }, - { KEYC_BSPACE, 0, MODEKEYCHOICE_BACKSPACE, 1 }, - { KEYC_DOWN | KEYC_CTRL, 0, MODEKEYCHOICE_SCROLLDOWN, 1 }, - { KEYC_DOWN, 0, MODEKEYCHOICE_DOWN, 1 }, - { KEYC_NPAGE, 0, MODEKEYCHOICE_PAGEDOWN, 1 }, - { KEYC_PPAGE, 0, MODEKEYCHOICE_PAGEUP, 1 }, - { KEYC_UP | KEYC_CTRL, 0, MODEKEYCHOICE_SCROLLUP, 1 }, - { KEYC_UP, 0, MODEKEYCHOICE_UP, 1 }, - { ' ', 0, MODEKEYCHOICE_TREE_TOGGLE, 1 }, - { KEYC_LEFT, 0, MODEKEYCHOICE_TREE_COLLAPSE, 1 }, - { KEYC_RIGHT, 0, MODEKEYCHOICE_TREE_EXPAND, 1 }, - { KEYC_LEFT | KEYC_CTRL, 0, MODEKEYCHOICE_TREE_COLLAPSE_ALL, 1 }, - { KEYC_RIGHT | KEYC_CTRL, 0, MODEKEYCHOICE_TREE_EXPAND_ALL, 1 }, - { KEYC_MOUSEDOWN1_PANE, 0, MODEKEYCHOICE_CHOOSE, 1 }, - { KEYC_MOUSEDOWN3_PANE, 0, MODEKEYCHOICE_TREE_TOGGLE, 1 }, - { KEYC_WHEELUP_PANE, 0, MODEKEYCHOICE_UP, 1 }, - { KEYC_WHEELDOWN_PANE, 0, MODEKEYCHOICE_DOWN, 1 }, - - { 0, -1, 0, 1 } + { '0' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '1' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '2' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '3' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '4' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '5' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '6' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '7' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '8' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '9' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX }, + { '\002' /* C-b */, 0, MODEKEYCHOICE_PAGEUP }, + { '\003' /* C-c */, 0, MODEKEYCHOICE_CANCEL }, + { '\005' /* C-e */, 0, MODEKEYCHOICE_SCROLLDOWN }, + { '\006' /* C-f */, 0, MODEKEYCHOICE_PAGEDOWN }, + { '\031' /* C-y */, 0, MODEKEYCHOICE_SCROLLUP }, + { '\n', 0, MODEKEYCHOICE_CHOOSE }, + { '\r', 0, MODEKEYCHOICE_CHOOSE }, + { 'j', 0, MODEKEYCHOICE_DOWN }, + { 'k', 0, MODEKEYCHOICE_UP }, + { 'q', 0, MODEKEYCHOICE_CANCEL }, + { KEYC_HOME, 0, MODEKEYCHOICE_STARTOFLIST }, + { 'g', 0, MODEKEYCHOICE_STARTOFLIST }, + { 'H', 0, MODEKEYCHOICE_TOPLINE }, + { 'L', 0, MODEKEYCHOICE_BOTTOMLINE }, + { 'G', 0, MODEKEYCHOICE_ENDOFLIST }, + { KEYC_END, 0, MODEKEYCHOICE_ENDOFLIST }, + { KEYC_BSPACE, 0, MODEKEYCHOICE_BACKSPACE }, + { KEYC_DOWN | KEYC_CTRL, 0, MODEKEYCHOICE_SCROLLDOWN }, + { KEYC_DOWN, 0, MODEKEYCHOICE_DOWN }, + { KEYC_NPAGE, 0, MODEKEYCHOICE_PAGEDOWN }, + { KEYC_PPAGE, 0, MODEKEYCHOICE_PAGEUP }, + { 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 | KEYC_CTRL, 0, MODEKEYCHOICE_TREE_COLLAPSE_ALL }, + { KEYC_RIGHT | KEYC_CTRL, 0, MODEKEYCHOICE_TREE_EXPAND_ALL }, + { KEYC_MOUSEDOWN1_PANE, 0, MODEKEYCHOICE_CHOOSE }, + { KEYC_MOUSEDOWN3_PANE, 0, MODEKEYCHOICE_TREE_TOGGLE }, + { KEYC_WHEELUP_PANE, 0, MODEKEYCHOICE_UP }, + { KEYC_WHEELDOWN_PANE, 0, MODEKEYCHOICE_DOWN }, + + { 0, -1, 0 } }; struct mode_key_tree mode_key_tree_vi_choice; -/* vi copy mode keys. */ -static const struct mode_key_entry mode_key_vi_copy[] = { - { ' ', 0, MODEKEYCOPY_STARTSELECTION, 1 }, - { '"', 0, MODEKEYCOPY_STARTNAMEDBUFFER, 1 }, - { '$', 0, MODEKEYCOPY_ENDOFLINE, 1 }, - { ',', 0, MODEKEYCOPY_JUMPREVERSE, 1 }, - { ';', 0, MODEKEYCOPY_JUMPAGAIN, 1 }, - { '/', 0, MODEKEYCOPY_SEARCHDOWN, 1 }, - { '0', 0, MODEKEYCOPY_STARTOFLINE, 1 }, - { '1', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '2', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '3', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '4', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '5', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '6', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '7', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '8', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { '9', 0, MODEKEYCOPY_STARTNUMBERPREFIX, 1 }, - { ':', 0, MODEKEYCOPY_GOTOLINE, 1 }, - { '?', 0, MODEKEYCOPY_SEARCHUP, 1 }, - { 'A', 0, MODEKEYCOPY_APPENDSELECTION, 1 }, - { 'B', 0, MODEKEYCOPY_PREVIOUSSPACE, 1 }, - { 'D', 0, MODEKEYCOPY_COPYENDOFLINE, 1 }, - { 'E', 0, MODEKEYCOPY_NEXTSPACEEND, 1 }, - { 'F', 0, MODEKEYCOPY_JUMPBACK, 1 }, - { 'G', 0, MODEKEYCOPY_HISTORYBOTTOM, 1 }, - { 'H', 0, MODEKEYCOPY_TOPLINE, 1 }, - { 'J', 0, MODEKEYCOPY_SCROLLDOWN, 1 }, - { 'K', 0, MODEKEYCOPY_SCROLLUP, 1 }, - { 'L', 0, MODEKEYCOPY_BOTTOMLINE, 1 }, - { 'M', 0, MODEKEYCOPY_MIDDLELINE, 1 }, - { 'N', 0, MODEKEYCOPY_SEARCHREVERSE, 1 }, - { 'T', 0, MODEKEYCOPY_JUMPTOBACK, 1 }, - { 'V', 0, MODEKEYCOPY_SELECTLINE, 1 }, - { 'W', 0, MODEKEYCOPY_NEXTSPACE, 1 }, - { '\002' /* C-b */, 0, MODEKEYCOPY_PREVIOUSPAGE, 1 }, - { '\003' /* C-c */, 0, MODEKEYCOPY_CANCEL, 1 }, - { '\004' /* C-d */, 0, MODEKEYCOPY_HALFPAGEDOWN, 1 }, - { '\005' /* C-e */, 0, MODEKEYCOPY_SCROLLDOWN, 1 }, - { '\006' /* C-f */, 0, MODEKEYCOPY_NEXTPAGE, 1 }, - { '\010' /* C-h */, 0, MODEKEYCOPY_LEFT, 1 }, - { '\025' /* C-u */, 0, MODEKEYCOPY_HALFPAGEUP, 1 }, - { '\031' /* C-y */, 0, MODEKEYCOPY_SCROLLUP, 1 }, - { '\033' /* Escape */, 0, MODEKEYCOPY_CLEARSELECTION, 1 }, - { '\n', 0, MODEKEYCOPY_COPYSELECTION, 1 }, - { '\r', 0, MODEKEYCOPY_COPYSELECTION, 1 }, - { '^', 0, MODEKEYCOPY_BACKTOINDENTATION, 1 }, - { 'b', 0, MODEKEYCOPY_PREVIOUSWORD, 1 }, - { 'e', 0, MODEKEYCOPY_NEXTWORDEND, 1 }, - { 'f', 0, MODEKEYCOPY_JUMP, 1 }, - { 'g', 0, MODEKEYCOPY_HISTORYTOP, 1 }, - { 'h', 0, MODEKEYCOPY_LEFT, 1 }, - { 'j', 0, MODEKEYCOPY_DOWN, 1 }, - { 'k', 0, MODEKEYCOPY_UP, 1 }, - { 'l', 0, MODEKEYCOPY_RIGHT, 1 }, - { 'n', 0, MODEKEYCOPY_SEARCHAGAIN, 1 }, - { 'o', 0, MODEKEYCOPY_OTHEREND, 1 }, - { 't', 0, MODEKEYCOPY_JUMPTO, 1 }, - { 'q', 0, MODEKEYCOPY_CANCEL, 1 }, - { 'v', 0, MODEKEYCOPY_RECTANGLETOGGLE, 1 }, - { 'w', 0, MODEKEYCOPY_NEXTWORD, 1 }, - { '{', 0, MODEKEYCOPY_PREVIOUSPARAGRAPH, 1 }, - { '}', 0, MODEKEYCOPY_NEXTPARAGRAPH, 1 }, - { KEYC_BSPACE, 0, MODEKEYCOPY_LEFT, 1 }, - { KEYC_DOWN | KEYC_CTRL, 0, MODEKEYCOPY_SCROLLDOWN, 1 }, - { KEYC_DOWN, 0, MODEKEYCOPY_DOWN, 1 }, - { KEYC_LEFT, 0, MODEKEYCOPY_LEFT, 1 }, - { KEYC_NPAGE, 0, MODEKEYCOPY_NEXTPAGE, 1 }, - { KEYC_PPAGE, 0, MODEKEYCOPY_PREVIOUSPAGE, 1 }, - { KEYC_RIGHT, 0, MODEKEYCOPY_RIGHT, 1 }, - { KEYC_UP | KEYC_CTRL, 0, MODEKEYCOPY_SCROLLUP, 1 }, - { KEYC_UP, 0, MODEKEYCOPY_UP, 1 }, - { KEYC_WHEELUP_PANE, 0, MODEKEYCOPY_SCROLLUP, 1 }, - { KEYC_WHEELDOWN_PANE, 0, MODEKEYCOPY_SCROLLDOWN, 1 }, - { KEYC_MOUSEDRAG1_PANE, 0, MODEKEYCOPY_STARTSELECTION, 1 }, - { KEYC_MOUSEDRAGEND1_PANE, 0, MODEKEYCOPY_COPYSELECTION, 1 }, - - { 0, -1, 0, 1 } -}; -struct mode_key_tree mode_key_tree_vi_copy; - /* emacs editing keys. */ static const struct mode_key_entry mode_key_emacs_edit[] = { - { '\001' /* C-a */, 0, MODEKEYEDIT_STARTOFLINE, 1 }, - { '\002' /* C-b */, 0, MODEKEYEDIT_CURSORLEFT, 1 }, - { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL, 1 }, - { '\004' /* C-d */, 0, MODEKEYEDIT_DELETE, 1 }, - { '\005' /* C-e */, 0, MODEKEYEDIT_ENDOFLINE, 1 }, - { '\006' /* C-f */, 0, MODEKEYEDIT_CURSORRIGHT, 1 }, - { '\010' /* C-H */, 0, MODEKEYEDIT_BACKSPACE, 1 }, - { '\011' /* Tab */, 0, MODEKEYEDIT_COMPLETE, 1 }, - { '\013' /* C-k */, 0, MODEKEYEDIT_DELETETOENDOFLINE, 1 }, - { '\016' /* C-n */, 0, MODEKEYEDIT_HISTORYDOWN, 1 }, - { '\020' /* C-p */, 0, MODEKEYEDIT_HISTORYUP, 1 }, - { '\024' /* C-t */, 0, MODEKEYEDIT_TRANSPOSECHARS, 1 }, - { '\025' /* C-u */, 0, MODEKEYEDIT_DELETELINE, 1 }, - { '\027' /* C-w */, 0, MODEKEYEDIT_DELETEWORD, 1 }, - { '\031' /* C-y */, 0, MODEKEYEDIT_PASTE, 1 }, - { '\033' /* Escape */, 0, MODEKEYEDIT_CANCEL, 1 }, - { '\n', 0, MODEKEYEDIT_ENTER, 1 }, - { '\r', 0, MODEKEYEDIT_ENTER, 1 }, - { 'b' | KEYC_ESCAPE, 0, MODEKEYEDIT_PREVIOUSWORD, 1 }, - { 'f' | KEYC_ESCAPE, 0, MODEKEYEDIT_NEXTWORDEND, 1 }, - { 'm' | KEYC_ESCAPE, 0, MODEKEYEDIT_STARTOFLINE, 1 }, - { KEYC_BSPACE, 0, MODEKEYEDIT_BACKSPACE, 1 }, - { KEYC_DC, 0, MODEKEYEDIT_DELETE, 1 }, - { KEYC_DOWN, 0, MODEKEYEDIT_HISTORYDOWN, 1 }, - { KEYC_LEFT, 0, MODEKEYEDIT_CURSORLEFT, 1 }, - { KEYC_RIGHT, 0, MODEKEYEDIT_CURSORRIGHT, 1 }, - { KEYC_UP, 0, MODEKEYEDIT_HISTORYUP, 1 }, - { KEYC_HOME, 0, MODEKEYEDIT_STARTOFLINE, 1 }, - { KEYC_END, 0, MODEKEYEDIT_ENDOFLINE, 1 }, - - { 0, -1, 0, 1 } + { '\001' /* C-a */, 0, MODEKEYEDIT_STARTOFLINE }, + { '\002' /* C-b */, 0, MODEKEYEDIT_CURSORLEFT }, + { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL }, + { '\004' /* C-d */, 0, MODEKEYEDIT_DELETE }, + { '\005' /* C-e */, 0, MODEKEYEDIT_ENDOFLINE }, + { '\006' /* C-f */, 0, MODEKEYEDIT_CURSORRIGHT }, + { '\010' /* C-H */, 0, MODEKEYEDIT_BACKSPACE }, + { '\011' /* Tab */, 0, MODEKEYEDIT_COMPLETE }, + { '\013' /* C-k */, 0, MODEKEYEDIT_DELETETOENDOFLINE }, + { '\016' /* C-n */, 0, MODEKEYEDIT_HISTORYDOWN }, + { '\020' /* C-p */, 0, MODEKEYEDIT_HISTORYUP }, + { '\024' /* C-t */, 0, MODEKEYEDIT_TRANSPOSECHARS }, + { '\025' /* C-u */, 0, MODEKEYEDIT_DELETELINE }, + { '\027' /* C-w */, 0, MODEKEYEDIT_DELETEWORD }, + { '\031' /* C-y */, 0, MODEKEYEDIT_PASTE }, + { '\033' /* Escape */, 0, MODEKEYEDIT_CANCEL }, + { '\n', 0, MODEKEYEDIT_ENTER }, + { '\r', 0, MODEKEYEDIT_ENTER }, + { 'b' | KEYC_ESCAPE, 0, MODEKEYEDIT_PREVIOUSWORD }, + { 'f' | KEYC_ESCAPE, 0, MODEKEYEDIT_NEXTWORDEND }, + { 'm' | KEYC_ESCAPE, 0, MODEKEYEDIT_STARTOFLINE }, + { KEYC_BSPACE, 0, MODEKEYEDIT_BACKSPACE }, + { KEYC_DC, 0, MODEKEYEDIT_DELETE }, + { KEYC_DOWN, 0, MODEKEYEDIT_HISTORYDOWN }, + { KEYC_LEFT, 0, MODEKEYEDIT_CURSORLEFT }, + { KEYC_RIGHT, 0, MODEKEYEDIT_CURSORRIGHT }, + { KEYC_UP, 0, MODEKEYEDIT_HISTORYUP }, + { KEYC_HOME, 0, MODEKEYEDIT_STARTOFLINE }, + { KEYC_END, 0, MODEKEYEDIT_ENDOFLINE }, + + { 0, -1, 0 } }; struct mode_key_tree mode_key_tree_emacs_edit; /* emacs choice selection keys. */ static const struct mode_key_entry mode_key_emacs_choice[] = { - { '0' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '1' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '2' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '3' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '4' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '5' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '6' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '7' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '8' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '9' | KEYC_ESCAPE, 0, MODEKEYCHOICE_STARTNUMBERPREFIX, 1 }, - { '\003' /* C-c */, 0, MODEKEYCHOICE_CANCEL, 1 }, - { '\016' /* C-n */, 0, MODEKEYCHOICE_DOWN, 1 }, - { '\020' /* C-p */, 0, MODEKEYCHOICE_UP, 1 }, - { '\026' /* C-v */, 0, MODEKEY |