From a76057df97157dc76959bcd40649f5953aebc9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sun, 13 Sep 2015 17:49:38 +0200 Subject: vis: rework input handling using libtermkey Key bindings are now specified as symbolic key strings, this will eventually allow run time configurable key mappings. This introduces a bulid time dependency on libtermkey which can be found at: http://www.leonerd.org.uk/code/libtermkey/ --- config.def.h | 834 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 414 insertions(+), 420 deletions(-) (limited to 'config.def.h') diff --git a/config.def.h b/config.def.h index 1516762..758bf69 100644 --- a/config.def.h +++ b/config.def.h @@ -1,10 +1,4 @@ /** start by reading from the top of vis.c up until config.h is included */ -/* macros used to specify keys for key bindings */ -#define ESC 0x1B -#define NONE(k) { .str = { k }, .code = 0 } -#define KEY(k) { .str = { '\0' }, .code = UI_KEY_##k } -#define CONTROL(k) NONE((k)&0x1F) -#define META(k) { .str = { ESC, (k) }, .code = 0 } /* a mode contains a set of key bindings which are currently valid. * @@ -70,160 +64,159 @@ static Command cmds[] = { /* called before any other keybindings are checked, if the function returns false * the key is completely ignored. */ -static bool vis_keypress(Key *key) { +static bool vis_keypress(const char *key) { editor_info_hide(vis); - if (vis->recording) - macro_append(vis->recording, key, sizeof(*key)); + if (vis->recording && key) + macro_append(vis->recording, key); return true; } static KeyBinding basic_movement[] = { - { { CONTROL('Z') }, suspend, { NULL } }, - { { KEY(LEFT) }, movement, { .i = MOVE_CHAR_PREV } }, - { { KEY(SHIFT_LEFT) }, movement, { .i = MOVE_LONGWORD_START_PREV } }, - { { KEY(RIGHT) }, movement, { .i = MOVE_CHAR_NEXT } }, - { { KEY(SHIFT_RIGHT) }, movement, { .i = MOVE_LONGWORD_START_NEXT } }, - { { KEY(UP) }, movement, { .i = MOVE_LINE_UP } }, - { { KEY(DOWN) }, movement, { .i = MOVE_LINE_DOWN } }, - { { KEY(PAGE_UP) }, wscroll, { .i = -PAGE } }, - { { KEY(PAGE_DOWN) }, wscroll, { .i = +PAGE } }, - { { KEY(HOME) }, movement, { .i = MOVE_LINE_START } }, - { { KEY(END) }, movement, { .i = MOVE_LINE_FINISH } }, + { "" , suspend, { NULL } }, + { "" , movement, { .i = MOVE_CHAR_PREV } }, + { "" , movement, { .i = MOVE_LONGWORD_START_PREV } }, + { "" , movement, { .i = MOVE_CHAR_NEXT } }, + { "" , movement, { .i = MOVE_LONGWORD_START_NEXT } }, + { "" , movement, { .i = MOVE_LINE_UP } }, + { "" , movement, { .i = MOVE_LINE_DOWN } }, + { "" , wscroll, { .i = -PAGE } }, + { "" , wscroll, { .i = +PAGE } }, + { "" , movement, { .i = MOVE_LINE_START } }, + { "" , movement, { .i = MOVE_LINE_FINISH } }, { /* empty last element, array terminator */ }, }; static KeyBinding vis_movements[] = { - { { KEY(BACKSPACE) }, movement, { .i = MOVE_CHAR_PREV } }, - { { NONE('h') }, movement, { .i = MOVE_CHAR_PREV } }, - { { NONE(' ') }, movement, { .i = MOVE_CHAR_NEXT } }, - { { NONE('l') }, movement, { .i = MOVE_CHAR_NEXT } }, - { { NONE('k') }, movement, { .i = MOVE_LINE_UP } }, - { { CONTROL('P') }, movement, { .i = MOVE_LINE_UP } }, - { { NONE('g'), NONE('k') }, movement, { .i = MOVE_SCREEN_LINE_UP } }, - { { NONE('g'), KEY(UP) }, movement, { .i = MOVE_SCREEN_LINE_UP } }, - { { NONE('j') }, movement, { .i = MOVE_LINE_DOWN } }, - { { CONTROL('J') }, movement, { .i = MOVE_LINE_DOWN } }, - { { CONTROL('N') }, movement, { .i = MOVE_LINE_DOWN } }, - { { NONE('\n') }, movement, { .i = MOVE_LINE_DOWN } }, - { { NONE('\r') }, movement, { .i = MOVE_LINE_DOWN } }, - { { NONE('g'), NONE('j') }, movement, { .i = MOVE_SCREEN_LINE_DOWN } }, - { { NONE('g'), KEY(DOWN) }, movement, { .i = MOVE_SCREEN_LINE_DOWN } }, - { { NONE('^') }, movement, { .i = MOVE_LINE_START } }, - { { NONE('g'), NONE('_') }, movement, { .i = MOVE_LINE_FINISH } }, - { { NONE('$') }, movement, { .i = MOVE_LINE_LASTCHAR } }, - { { NONE('%') }, movement, { .i = MOVE_BRACKET_MATCH } }, - { { NONE('b') }, movement, { .i = MOVE_WORD_START_PREV } }, - { { NONE('B') }, movement, { .i = MOVE_LONGWORD_START_PREV } }, - { { NONE('w') }, movement, { .i = MOVE_WORD_START_NEXT } }, - { { NONE('W') }, movement, { .i = MOVE_LONGWORD_START_NEXT } }, - { { NONE('g'), NONE('e') }, movement, { .i = MOVE_WORD_END_PREV } }, - { { NONE('g'), NONE('E') }, movement, { .i = MOVE_LONGWORD_END_PREV } }, - { { NONE('e') }, movement, { .i = MOVE_WORD_END_NEXT } }, - { { NONE('E') }, movement, { .i = MOVE_LONGWORD_END_NEXT } }, - { { NONE('{') }, movement, { .i = MOVE_PARAGRAPH_PREV } }, - { { NONE('}') }, movement, { .i = MOVE_PARAGRAPH_NEXT } }, - { { NONE('(') }, movement, { .i = MOVE_SENTENCE_PREV } }, - { { NONE(')') }, movement, { .i = MOVE_SENTENCE_NEXT } }, - { { NONE('['), NONE('[') }, movement, { .i = MOVE_FUNCTION_START_PREV } }, - { { NONE('['), NONE(']') }, movement, { .i = MOVE_FUNCTION_END_PREV } }, - { { NONE(']'), NONE('[') }, movement, { .i = MOVE_FUNCTION_START_NEXT } }, - { { NONE(']'), NONE(']') }, movement, { .i = MOVE_FUNCTION_END_NEXT } }, - { { NONE('g'), NONE('g') }, gotoline, { .i = -1 } }, - { { NONE('g'), NONE('0') }, movement, { .i = MOVE_SCREEN_LINE_BEGIN } }, - { { NONE('g'), NONE('m') }, movement, { .i = MOVE_SCREEN_LINE_MIDDLE } }, - { { NONE('g'), NONE('$') }, movement, { .i = MOVE_SCREEN_LINE_END } }, - { { NONE('G') }, gotoline, { .i = +1 } }, - { { NONE('|') }, movement, { .i = MOVE_COLUMN } }, - { { NONE('n') }, movement, { .i = MOVE_SEARCH_FORWARD } }, - { { NONE('N') }, movement, { .i = MOVE_SEARCH_BACKWARD } }, - { { NONE('H') }, movement, { .i = MOVE_WINDOW_LINE_TOP } }, - { { NONE('M') }, movement, { .i = MOVE_WINDOW_LINE_MIDDLE } }, - { { NONE('L') }, movement, { .i = MOVE_WINDOW_LINE_BOTTOM } }, - { { NONE('*') }, movement, { .i = MOVE_SEARCH_WORD_FORWARD } }, - { { NONE('#') }, movement, { .i = MOVE_SEARCH_WORD_BACKWARD} }, - { { NONE('f') }, movement_key, { .i = MOVE_RIGHT_TO } }, - { { NONE('F') }, movement_key, { .i = MOVE_LEFT_TO } }, - { { NONE('t') }, movement_key, { .i = MOVE_RIGHT_TILL } }, - { { NONE('T') }, movement_key, { .i = MOVE_LEFT_TILL } }, - { { NONE(';') }, totill_repeat, { NULL } }, - { { NONE(',') }, totill_reverse,{ NULL } }, - { { NONE('/') }, prompt_search,{ .s = "/" } }, - { { NONE('?') }, prompt_search,{ .s = "?" } }, + { "" , movement, { .i = MOVE_CHAR_PREV } }, + { "h" , movement, { .i = MOVE_CHAR_PREV } }, + { " " , movement, { .i = MOVE_CHAR_NEXT } }, + { "l" , movement, { .i = MOVE_CHAR_NEXT } }, + { "k" , movement, { .i = MOVE_LINE_UP } }, + { "C-p" , movement, { .i = MOVE_LINE_UP } }, + { "gk" , movement, { .i = MOVE_SCREEN_LINE_UP } }, + { "g" , movement, { .i = MOVE_SCREEN_LINE_UP } }, + { "j" , movement, { .i = MOVE_LINE_DOWN } }, + { "" , movement, { .i = MOVE_LINE_DOWN } }, + { "" , movement, { .i = MOVE_LINE_DOWN } }, + { "" , movement, { .i = MOVE_LINE_DOWN } }, + { "gj" , movement, { .i = MOVE_SCREEN_LINE_DOWN } }, + { "g" , movement, { .i = MOVE_SCREEN_LINE_DOWN } }, + { "^" , movement, { .i = MOVE_LINE_START } }, + { "g_" , movement, { .i = MOVE_LINE_FINISH } }, + { "$" , movement, { .i = MOVE_LINE_LASTCHAR } }, + { "%" , movement, { .i = MOVE_BRACKET_MATCH } }, + { "b" , movement, { .i = MOVE_WORD_START_PREV } }, + { "B" , movement, { .i = MOVE_LONGWORD_START_PREV } }, + { "w" , movement, { .i = MOVE_WORD_START_NEXT } }, + { "W" , movement, { .i = MOVE_LONGWORD_START_NEXT } }, + { "ge" , movement, { .i = MOVE_WORD_END_PREV } }, + { "gE" , movement, { .i = MOVE_LONGWORD_END_PREV } }, + { "e" , movement, { .i = MOVE_WORD_END_NEXT } }, + { "E" , movement, { .i = MOVE_LONGWORD_END_NEXT } }, + { "{" , movement, { .i = MOVE_PARAGRAPH_PREV } }, + { "}" , movement, { .i = MOVE_PARAGRAPH_NEXT } }, + { "(" , movement, { .i = MOVE_SENTENCE_PREV } }, + { ")" , movement, { .i = MOVE_SENTENCE_NEXT } }, + { "[[" , movement, { .i = MOVE_FUNCTION_START_PREV } }, + { "[]" , movement, { .i = MOVE_FUNCTION_END_PREV } }, + { "][" , movement, { .i = MOVE_FUNCTION_START_NEXT } }, + { "]]" , movement, { .i = MOVE_FUNCTION_END_NEXT } }, + { "gg" , gotoline, { .i = -1 } }, + { "g0" , movement, { .i = MOVE_SCREEN_LINE_BEGIN } }, + { "gm" , movement, { .i = MOVE_SCREEN_LINE_MIDDLE } }, + { "g$" , movement, { .i = MOVE_SCREEN_LINE_END } }, + { "G" , gotoline, { .i = +1 } }, + { "|" , movement, { .i = MOVE_COLUMN } }, + { "n" , movement, { .i = MOVE_SEARCH_FORWARD } }, + { "N" , movement, { .i = MOVE_SEARCH_BACKWARD } }, + { "H" , movement, { .i = MOVE_WINDOW_LINE_TOP } }, + { "M" , movement, { .i = MOVE_WINDOW_LINE_MIDDLE } }, + { "L" , movement, { .i = MOVE_WINDOW_LINE_BOTTOM } }, + { "*" , movement, { .i = MOVE_SEARCH_WORD_FORWARD } }, + { "#" , movement, { .i = MOVE_SEARCH_WORD_BACKWARD} }, + { "f" , movement_key, { .i = MOVE_RIGHT_TO } }, + { "F" , movement_key, { .i = MOVE_LEFT_TO } }, + { "t" , movement_key, { .i = MOVE_RIGHT_TILL } }, + { "T" , movement_key, { .i = MOVE_LEFT_TILL } }, + { ";" , totill_repeat, { NULL } }, + { "," , totill_reverse,{ NULL } }, + { "/" , prompt_search,{ .s = "/" } }, + { "?" , prompt_search,{ .s = "?" } }, { /* empty last element, array terminator */ }, }; static KeyBinding vis_textobjs[] = { - { { NONE('a'), NONE('w') }, textobj, { .i = TEXT_OBJ_OUTER_WORD } }, - { { NONE('a'), NONE('W') }, textobj, { .i = TEXT_OBJ_OUTER_LONGWORD } }, - { { NONE('a'), NONE('s') }, textobj, { .i = TEXT_OBJ_SENTENCE } }, - { { NONE('a'), NONE('p') }, textobj, { .i = TEXT_OBJ_PARAGRAPH } }, - { { NONE('a'), NONE('[') }, textobj, { .i = TEXT_OBJ_OUTER_SQUARE_BRACKET } }, - { { NONE('a'), NONE(']') }, textobj, { .i = TEXT_OBJ_OUTER_SQUARE_BRACKET } }, - { { NONE('a'), NONE('(') }, textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, - { { NONE('a'), NONE(')') }, textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, - { { NONE('a'), NONE('b') }, textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, - { { NONE('a'), NONE('<') }, textobj, { .i = TEXT_OBJ_OUTER_ANGLE_BRACKET } }, - { { NONE('a'), NONE('>') }, textobj, { .i = TEXT_OBJ_OUTER_ANGLE_BRACKET } }, - { { NONE('a'), NONE('{') }, textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, - { { NONE('a'), NONE('}') }, textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, - { { NONE('a'), NONE('B') }, textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, - { { NONE('a'), NONE('"') }, textobj, { .i = TEXT_OBJ_OUTER_QUOTE } }, - { { NONE('a'), NONE('\'') }, textobj, { .i = TEXT_OBJ_OUTER_SINGLE_QUOTE } }, - { { NONE('a'), NONE('`') }, textobj, { .i = TEXT_OBJ_OUTER_BACKTICK } }, - { { NONE('a'), NONE('e') }, textobj, { .i = TEXT_OBJ_OUTER_ENTIRE } }, - { { NONE('a'), NONE('f') }, textobj, { .i = TEXT_OBJ_OUTER_FUNCTION } }, - { { NONE('a'), NONE('l') }, textobj, { .i = TEXT_OBJ_OUTER_LINE } }, + { "aw", textobj, { .i = TEXT_OBJ_OUTER_WORD } }, + { "aW", textobj, { .i = TEXT_OBJ_OUTER_LONGWORD } }, + { "as", textobj, { .i = TEXT_OBJ_SENTENCE } }, + { "ap", textobj, { .i = TEXT_OBJ_PARAGRAPH } }, + { "a[", textobj, { .i = TEXT_OBJ_OUTER_SQUARE_BRACKET } }, + { "a]", textobj, { .i = TEXT_OBJ_OUTER_SQUARE_BRACKET } }, + { "a(", textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, + { "a)", textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, + { "ab", textobj, { .i = TEXT_OBJ_OUTER_PARANTHESE } }, + { "a<", textobj, { .i = TEXT_OBJ_OUTER_ANGLE_BRACKET } }, + { "a>", textobj, { .i = TEXT_OBJ_OUTER_ANGLE_BRACKET } }, + { "a{", textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, + { "a}", textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, + { "aB", textobj, { .i = TEXT_OBJ_OUTER_CURLY_BRACKET } }, + { "a\"", textobj, { .i = TEXT_OBJ_OUTER_QUOTE } }, + { "a\'", textobj, { .i = TEXT_OBJ_OUTER_SINGLE_QUOTE } }, + { "a`", textobj, { .i = TEXT_OBJ_OUTER_BACKTICK } }, + { "ae", textobj, { .i = TEXT_OBJ_OUTER_ENTIRE } }, + { "af", textobj, { .i = TEXT_OBJ_OUTER_FUNCTION } }, + { "al", textobj, { .i = TEXT_OBJ_OUTER_LINE } }, { /* empty last element, array terminator */ }, }; static KeyBinding vis_inner_textobjs[] = { - { { NONE('i'), NONE('w') }, textobj, { .i = TEXT_OBJ_INNER_WORD } }, - { { NONE('i'), NONE('W') }, textobj, { .i = TEXT_OBJ_INNER_LONGWORD } }, - { { NONE('i'), NONE('s') }, textobj, { .i = TEXT_OBJ_SENTENCE } }, - { { NONE('i'), NONE('p') }, textobj, { .i = TEXT_OBJ_PARAGRAPH } }, - { { NONE('i'), NONE('[') }, textobj, { .i = TEXT_OBJ_INNER_SQUARE_BRACKET } }, - { { NONE('i'), NONE(']') }, textobj, { .i = TEXT_OBJ_INNER_SQUARE_BRACKET } }, - { { NONE('i'), NONE('(') }, textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, - { { NONE('i'), NONE(')') }, textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, - { { NONE('i'), NONE('b') }, textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, - { { NONE('i'), NONE('<') }, textobj, { .i = TEXT_OBJ_INNER_ANGLE_BRACKET } }, - { { NONE('i'), NONE('>') }, textobj, { .i = TEXT_OBJ_INNER_ANGLE_BRACKET } }, - { { NONE('i'), NONE('{') }, textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, - { { NONE('i'), NONE('}') }, textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, - { { NONE('i'), NONE('B') }, textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, - { { NONE('i'), NONE('"') }, textobj, { .i = TEXT_OBJ_INNER_QUOTE } }, - { { NONE('i'), NONE('\'') }, textobj, { .i = TEXT_OBJ_INNER_SINGLE_QUOTE } }, - { { NONE('i'), NONE('`') }, textobj, { .i = TEXT_OBJ_INNER_BACKTICK } }, - { { NONE('i'), NONE('e') }, textobj, { .i = TEXT_OBJ_INNER_ENTIRE } }, - { { NONE('i'), NONE('f') }, textobj, { .i = TEXT_OBJ_INNER_FUNCTION } }, - { { NONE('i'), NONE('l') }, textobj, { .i = TEXT_OBJ_INNER_LINE } }, + { "iw", textobj, { .i = TEXT_OBJ_INNER_WORD } }, + { "iW", textobj, { .i = TEXT_OBJ_INNER_LONGWORD } }, + { "is", textobj, { .i = TEXT_OBJ_SENTENCE } }, + { "ip", textobj, { .i = TEXT_OBJ_PARAGRAPH } }, + { "i[", textobj, { .i = TEXT_OBJ_INNER_SQUARE_BRACKET } }, + { "i]", textobj, { .i = TEXT_OBJ_INNER_SQUARE_BRACKET } }, + { "i(", textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, + { "i)", textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, + { "ib", textobj, { .i = TEXT_OBJ_INNER_PARANTHESE } }, + { "i<", textobj, { .i = TEXT_OBJ_INNER_ANGLE_BRACKET } }, + { "i>", textobj, { .i = TEXT_OBJ_INNER_ANGLE_BRACKET } }, + { "i{", textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, + { "i}", textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, + { "iB", textobj, { .i = TEXT_OBJ_INNER_CURLY_BRACKET } }, + { "i\"", textobj, { .i = TEXT_OBJ_INNER_QUOTE } }, + { "i\'", textobj, { .i = TEXT_OBJ_INNER_SINGLE_QUOTE } }, + { "i`", textobj, { .i = TEXT_OBJ_INNER_BACKTICK } }, + { "ie", textobj, { .i = TEXT_OBJ_INNER_ENTIRE } }, + { "if", textobj, { .i = TEXT_OBJ_INNER_FUNCTION } }, + { "il", textobj, { .i = TEXT_OBJ_INNER_LINE } }, { /* empty last element, array terminator */ }, }; static KeyBinding vis_operators[] = { - { { NONE('0') }, zero, { NULL } }, - { { NONE('1') }, count, { .i = 1 } }, - { { NONE('2') }, count, { .i = 2 } }, - { { NONE('3') }, count, { .i = 3 } }, - { { NONE('4') }, count, { .i = 4 } }, - { { NONE('5') }, count, { .i = 5 } }, - { { NONE('6') }, count, { .i = 6 } }, - { { NONE('7') }, count, { .i = 7 } }, - { { NONE('8') }, count, { .i = 8 } }, - { { NONE('9') }, count, { .i = 9 } }, - { { NONE('d') }, operator, { .i = OP_DELETE } }, - { { NONE('c') }, operator, { .i = OP_CHANGE } }, - { { NONE('y') }, operator, { .i = OP_YANK } }, - { { NONE('p') }, put, { .i = PUT_AFTER } }, - { { NONE('P') }, put, { .i = PUT_BEFORE } }, - { { NONE('g'), NONE('p') }, put, { .i = PUT_AFTER_END } }, - { { NONE('g'), NONE('P') }, put, { .i = PUT_BEFORE_END } }, - { { NONE('>') }, operator, { .i = OP_SHIFT_RIGHT } }, - { { NONE('<') }, operator, { .i = OP_SHIFT_LEFT } }, - { { NONE('g'), NONE('U') }, changecase, { .i = +1 } }, - { { NONE('~') }, changecase, { .i = 0 } }, - { { NONE('g'), NONE('~') }, changecase, { .i = 0 } }, - { { NONE('g'), NONE('u') }, changecase, { .i = -1 } }, + { "0" , zero, { NULL } }, + { "1" , count, { .i = 1 } }, + { "2" , count, { .i = 2 } }, + { "3" , count, { .i = 3 } }, + { "4" , count, { .i = 4 } }, + { "5" , count, { .i = 5 } }, + { "6" , count, { .i = 6 } }, + { "7" , count, { .i = 7 } }, + { "8" , count, { .i = 8 } }, + { "9" , count, { .i = 9 } }, + { "d" , operator, { .i = OP_DELETE } }, + { "c" , operator, { .i = OP_CHANGE } }, + { "y" , operator, { .i = OP_YANK } }, + { "p" , put, { .i = PUT_AFTER } }, + { "P" , put, { .i = PUT_BEFORE } }, + { "gp" , put, { .i = PUT_AFTER_END } }, + { "gP" , put, { .i = PUT_BEFORE_END } }, + { ">" , operator, { .i = OP_SHIFT_RIGHT } }, + { "<" , operator, { .i = OP_SHIFT_LEFT } }, + { "gU" , changecase, { .i = +1 } }, + { "~" , changecase, { .i = 0 } }, + { "g~" , changecase, { .i = 0 } }, + { "gu" , changecase, { .i = -1 } }, { /* empty last element, array terminator */ }, }; @@ -242,224 +235,224 @@ static void vis_mode_operator_input(const char *str, size_t len) { } static KeyBinding vis_operator_options[] = { - { { NONE('v') }, motiontype, { .i = CHARWISE } }, - { { NONE('V') }, motiontype, { .i = LINEWISE } }, + { "v" , motiontype, { .i = CHARWISE } }, + { "V" , motiontype, { .i = LINEWISE } }, { /* empty last element, array terminator */ }, }; static KeyBinding vis_registers[] = { /* {a-zA-Z0-9.%#:-"} */ - { { NONE('"'), NONE('a') }, reg, { .i = REG_a } }, - { { NONE('"'), NONE('b') }, reg, { .i = REG_b } }, - { { NONE('"'), NONE('c') }, reg, { .i = REG_c } }, - { { NONE('"'), NONE('d') }, reg, { .i = REG_d } }, - { { NONE('"'), NONE('e') }, reg, { .i = REG_e } }, - { { NONE('"'), NONE('f') }, reg, { .i = REG_f } }, - { { NONE('"'), NONE('g') }, reg, { .i = REG_g } }, - { { NONE('"'), NONE('h') }, reg, { .i = REG_h } }, - { { NONE('"'), NONE('i') }, reg, { .i = REG_i } }, - { { NONE('"'), NONE('j') }, reg, { .i = REG_j } }, - { { NONE('"'), NONE('k') }, reg, { .i = REG_k } }, - { { NONE('"'), NONE('l') }, reg, { .i = REG_l } }, - { { NONE('"'), NONE('m') }, reg, { .i = REG_m } }, - { { NONE('"'), NONE('n') }, reg, { .i = REG_n } }, - { { NONE('"'), NONE('o') }, reg, { .i = REG_o } }, - { { NONE('"'), NONE('p') }, reg, { .i = REG_p } }, - { { NONE('"'), NONE('q') }, reg, { .i = REG_q } }, - { { NONE('"'), NONE('r') }, reg, { .i = REG_r } }, - { { NONE('"'), NONE('s') }, reg, { .i = REG_s } }, - { { NONE('"'), NONE('t') }, reg, { .i = REG_t } }, - { { NONE('"'), NONE('u') }, reg, { .i = REG_u } }, - { { NONE('"'), NONE('v') }, reg, { .i = REG_v } }, - { { NONE('"'), NONE('w') }, reg, { .i = REG_w } }, - { { NONE('"'), NONE('x') }, reg, { .i = REG_x } }, - { { NONE('"'), NONE('y') }, reg, { .i = REG_y } }, - { { NONE('"'), NONE('z') }, reg, { .i = REG_z } }, - { /* empty last element, array terminator */ }, + { "\"a", reg, { .i = REG_a } }, + { "\"b", reg, { .i = REG_b } }, + { "\"c", reg, { .i = REG_c } }, + { "\"d", reg, { .i = REG_d } }, + { "\"e", reg, { .i = REG_e } }, + { "\"f", reg, { .i = REG_f } }, + { "\"g", reg, { .i = REG_g } }, + { "\"h", reg, { .i = REG_h } }, + { "\"i", reg, { .i = REG_i } }, + { "\"j", reg, { .i = REG_j } }, + { "\"k", reg, { .i = REG_k } }, + { "\"l", reg, { .i = REG_l } }, + { "\"m", reg, { .i = REG_m } }, + { "\"n", reg, { .i = REG_n } }, + { "\"o", reg, { .i = REG_o } }, + { "\"p", reg, { .i = REG_p } }, + { "\"q", reg, { .i = REG_q } }, + { "\"r", reg, { .i = REG_r } }, + { "\"s", reg, { .i = REG_s } }, + { "\"t", reg, { .i = REG_t } }, + { "\"u", reg, { .i = REG_u } }, + { "\"v", reg, { .i = REG_v } }, + { "\"w", reg, { .i = REG_w } }, + { "\"x", reg, { .i = REG_x } }, + { "\"y", reg, { .i = REG_y } }, + { "\"z", reg, { .i = REG_z } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_marks[] = { - { { NONE('`'), NONE('a') }, mark, { .i = MARK_a } }, - { { NONE('`'), NONE('b') }, mark, { .i = MARK_b } }, - { { NONE('`'), NONE('c') }, mark, { .i = MARK_c } }, - { { NONE('`'), NONE('d') }, mark, { .i = MARK_d } }, - { { NONE('`'), NONE('e') }, mark, { .i = MARK_e } }, - { { NONE('`'), NONE('f') }, mark, { .i = MARK_f } }, - { { NONE('`'), NONE('g') }, mark, { .i = MARK_g } }, - { { NONE('`'), NONE('h') }, mark, { .i = MARK_h } }, - { { NONE('`'), NONE('i') }, mark, { .i = MARK_i } }, - { { NONE('`'), NONE('j') }, mark, { .i = MARK_j } }, - { { NONE('`'), NONE('k') }, mark, { .i = MARK_k } }, - { { NONE('`'), NONE('l') }, mark, { .i = MARK_l } }, - { { NONE('`'), NONE('m') }, mark, { .i = MARK_m } }, - { { NONE('`'), NONE('n') }, mark, { .i = MARK_n } }, - { { NONE('`'), NONE('o') }, mark, { .i = MARK_o } }, - { { NONE('`'), NONE('p') }, mark, { .i = MARK_p } }, - { { NONE('`'), NONE('q') }, mark, { .i = MARK_q } }, - { { NONE('`'), NONE('r') }, mark, { .i = MARK_r } }, - { { NONE('`'), NONE('s') }, mark, { .i = MARK_s } }, - { { NONE('`'), NONE('t') }, mark, { .i = MARK_t } }, - { { NONE('`'), NONE('u') }, mark, { .i = MARK_u } }, - { { NONE('`'), NONE('v') }, mark, { .i = MARK_v } }, - { { NONE('`'), NONE('w') }, mark, { .i = MARK_w } }, - { { NONE('`'), NONE('x') }, mark, { .i = MARK_x } }, - { { NONE('`'), NONE('y') }, mark, { .i = MARK_y } }, - { { NONE('`'), NONE('z') }, mark, { .i = MARK_z } }, - { { NONE('`'), NONE('<') }, mark, { .i = MARK_SELECTION_START } }, - { { NONE('`'), NONE('>') }, mark, { .i = MARK_SELECTION_END } }, - { /* empty last element, array terminator */ }, + { "`a'", mark, { .i = MARK_a } }, + { "`b'", mark, { .i = MARK_b } }, + { "`c'", mark, { .i = MARK_c } }, + { "`d'", mark, { .i = MARK_d } }, + { "`e'", mark, { .i = MARK_e } }, + { "`f'", mark, { .i = MARK_f } }, + { "`g'", mark, { .i = MARK_g } }, + { "`h'", mark, { .i = MARK_h } }, + { "`i'", mark, { .i = MARK_i } }, + { "`j'", mark, { .i = MARK_j } }, + { "`k'", mark, { .i = MARK_k } }, + { "`l'", mark, { .i = MARK_l } }, + { "`m'", mark, { .i = MARK_m } }, + { "`n'", mark, { .i = MARK_n } }, + { "`o'", mark, { .i = MARK_o } }, + { "`p'", mark, { .i = MARK_p } }, + { "`q'", mark, { .i = MARK_q } }, + { "`r'", mark, { .i = MARK_r } }, + { "`s'", mark, { .i = MARK_s } }, + { "`t'", mark, { .i = MARK_t } }, + { "`u'", mark, { .i = MARK_u } }, + { "`v'", mark, { .i = MARK_v } }, + { "`w'", mark, { .i = MARK_w } }, + { "`x'", mark, { .i = MARK_x } }, + { "`y'", mark, { .i = MARK_y } }, + { "`z'", mark, { .i = MARK_z } }, + { "`<'", mark, { .i = MARK_SELECTION_START } }, + { "`>'", mark, { .i = MARK_SELECTION_END } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_marks_line[] = { - { { NONE('\''), NONE('a') }, mark_line, { .i = MARK_a } }, - { { NONE('\''), NONE('b') }, mark_line, { .i = MARK_b } }, - { { NONE('\''), NONE('c') }, mark_line, { .i = MARK_c } }, - { { NONE('\''), NONE('d') }, mark_line, { .i = MARK_d } }, - { { NONE('\''), NONE('e') }, mark_line, { .i = MARK_e } }, - { { NONE('\''), NONE('f') }, mark_line, { .i = MARK_f } }, - { { NONE('\''), NONE('g') }, mark_line, { .i = MARK_g } }, - { { NONE('\''), NONE('h') }, mark_line, { .i = MARK_h } }, - { { NONE('\''), NONE('i') }, mark_line, { .i = MARK_i } }, - { { NONE('\''), NONE('j') }, mark_line, { .i = MARK_j } }, - { { NONE('\''), NONE('k') }, mark_line, { .i = MARK_k } }, - { { NONE('\''), NONE('l') }, mark_line, { .i = MARK_l } }, - { { NONE('\''), NONE('m') }, mark_line, { .i = MARK_m } }, - { { NONE('\''), NONE('n') }, mark_line, { .i = MARK_n } }, - { { NONE('\''), NONE('o') }, mark_line, { .i = MARK_o } }, - { { NONE('\''), NONE('p') }, mark_line, { .i = MARK_p } }, - { { NONE('\''), NONE('q') }, mark_line, { .i = MARK_q } }, - { { NONE('\''), NONE('r') }, mark_line, { .i = MARK_r } }, - { { NONE('\''), NONE('s') }, mark_line, { .i = MARK_s } }, - { { NONE('\''), NONE('t') }, mark_line, { .i = MARK_t } }, - { { NONE('\''), NONE('u') }, mark_line, { .i = MARK_u } }, - { { NONE('\''), NONE('v') }, mark_line, { .i = MARK_v } }, - { { NONE('\''), NONE('w') }, mark_line, { .i = MARK_w } }, - { { NONE('\''), NONE('x') }, mark_line, { .i = MARK_x } }, - { { NONE('\''), NONE('y') }, mark_line, { .i = MARK_y } }, - { { NONE('\''), NONE('z') }, mark_line, { .i = MARK_z } }, - { { NONE('\''), NONE('<') }, mark_line, { .i = MARK_SELECTION_START } }, - { { NONE('\''), NONE('>') }, mark_line, { .i = MARK_SELECTION_END } }, - { /* empty last element, array terminator */ }, + { "'a", mark_line, { .i = MARK_a } }, + { "'b", mark_line, { .i = MARK_b } }, + { "'c", mark_line, { .i = MARK_c } }, + { "'d", mark_line, { .i = MARK_d } }, + { "'e", mark_line, { .i = MARK_e } }, + { "'f", mark_line, { .i = MARK_f } }, + { "'g", mark_line, { .i = MARK_g } }, + { "'h", mark_line, { .i = MARK_h } }, + { "'i", mark_line, { .i = MARK_i } }, + { "'j", mark_line, { .i = MARK_j } }, + { "'k", mark_line, { .i = MARK_k } }, + { "'l", mark_line, { .i = MARK_l } }, + { "'m", mark_line, { .i = MARK_m } }, + { "'n", mark_line, { .i = MARK_n } }, + { "'o", mark_line, { .i = MARK_o } }, + { "'p", mark_line, { .i = MARK_p } }, + { "'q", mark_line, { .i = MARK_q } }, + { "'r", mark_line, { .i = MARK_r } }, + { "'s", mark_line, { .i = MARK_s } }, + { "'t", mark_line, { .i = MARK_t } }, + { "'u", mark_line, { .i = MARK_u } }, + { "'v", mark_line, { .i = MARK_v } }, + { "'w", mark_line, { .i = MARK_w } }, + { "'x", mark_line, { .i = MARK_x } }, + { "'y", mark_line, { .i = MARK_y } }, + { "'z", mark_line, { .i = MARK_z } }, + { "'<", mark_line, { .i = MARK_SELECTION_START } }, + { "'>", mark_line, { .i = MARK_SELECTION_END } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_marks_set[] = { - { { NONE('m'), NONE('a') }, mark_set, { .i = MARK_a } }, - { { NONE('m'), NONE('b') }, mark_set, { .i = MARK_b } }, - { { NONE('m'), NONE('c') }, mark_set, { .i = MARK_c } }, - { { NONE('m'), NONE('d') }, mark_set, { .i = MARK_d } }, - { { NONE('m'), NONE('e') }, mark_set, { .i = MARK_e } }, - { { NONE('m'), NONE('f') }, mark_set, { .i = MARK_f } }, - { { NONE('m'), NONE('g') }, mark_set, { .i = MARK_g } }, - { { NONE('m'), NONE('h') }, mark_set, { .i = MARK_h } }, - { { NONE('m'), NONE('i') }, mark_set, { .i = MARK_i } }, - { { NONE('m'), NONE('j') }, mark_set, { .i = MARK_j } }, - { { NONE('m'), NONE('k') }, mark_set, { .i = MARK_k } }, - { { NONE('m'), NONE('l') }, mark_set, { .i = MARK_l } }, - { { NONE('m'), NONE('m') }, mark_set, { .i = MARK_m } }, - { { NONE('m'), NONE('n') }, mark_set, { .i = MARK_n } }, - { { NONE('m'), NONE('o') }, mark_set, { .i = MARK_o } }, - { { NONE('m'), NONE('p') }, mark_set, { .i = MARK_p } }, - { { NONE('m'), NONE('q') }, mark_set, { .i = MARK_q } }, - { { NONE('m'), NONE('r') }, mark_set, { .i = MARK_r } }, - { { NONE('m'), NONE('s') }, mark_set, { .i = MARK_s } }, - { { NONE('m'), NONE('t') }, mark_set, { .i = MARK_t } }, - { { NONE('m'), NONE('u') }, mark_set, { .i = MARK_u } }, - { { NONE('m'), NONE('v') }, mark_set, { .i = MARK_v } }, - { { NONE('m'), NONE('w') }, mark_set, { .i = MARK_w } }, - { { NONE('m'), NONE('x') }, mark_set, { .i = MARK_x } }, - { { NONE('m'), NONE('y') }, mark_set, { .i = MARK_y } }, - { { NONE('m'), NONE('z') }, mark_set, { .i = MARK_z } }, - { /* empty last element, array terminator */ }, + { "ma", mark_set, { .i = MARK_a } }, + { "mb", mark_set, { .i = MARK_b } }, + { "mc", mark_set, { .i = MARK_c } }, + { "md", mark_set, { .i = MARK_d } }, + { "me", mark_set, { .i = MARK_e } }, + { "mf", mark_set, { .i = MARK_f } }, + { "mg", mark_set, { .i = MARK_g } }, + { "mh", mark_set, { .i = MARK_h } }, + { "mi", mark_set, { .i = MARK_i } }, + { "mj", mark_set, { .i = MARK_j } }, + { "mk", mark_set, { .i = MARK_k } }, + { "ml", mark_set, { .i = MARK_l } }, + { "mm", mark_set, { .i = MARK_m } }, + { "mn", mark_set, { .i = MARK_n } }, + { "mo", mark_set, { .i = MARK_o } }, + { "mp", mark_set, { .i = MARK_p } }, + { "mq", mark_set, { .i = MARK_q } }, + { "mr", mark_set, { .i = MARK_r } }, + { "ms", mark_set, { .i = MARK_s } }, + { "mt", mark_set, { .i = MARK_t } }, + { "mu", mark_set, { .i = MARK_u } }, + { "mv", mark_set, { .i = MARK_v } }, + { "mw", mark_set, { .i = MARK_w } }, + { "mx", mark_set, { .i = MARK_x } }, + { "my", mark_set, { .i = MARK_y } }, + { "mz", mark_set, { .i = MARK_z } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_mode_normal[] = { - { { NONE(ESC) }, cursors_clear, { } }, - { { CONTROL('K') }, cursors_new, { .i = -1 } }, - { { CONTROL('J') }, cursors_new, { .i = +1 } }, - { { CONTROL('A') }, cursors_align, { } }, - { { CONTROL('N') }, cursors_select, { } }, - { { CONTROL('P') }, cursors_remove, { } }, - { { CONTROL('w'), NONE('n') }, cmd, { .s = "open" } }, - { { CONTROL('w'), NONE('c') }, cmd, { .s = "q" } }, - { { CONTROL('w'), NONE('s') }, cmd, { .s = "split" } }, - { { CONTROL('w'), NONE('v') }, cmd, { .s = "vsplit" } }, - { { CONTROL('w'), NONE('j') }, call, { .f = editor_window_next } }, - { { CONTROL('w'), NONE('l') }, call, { .f = editor_window_next } }, - { { CONTROL('w'), NONE('k') }, call, { .f = editor_window_prev } }, - { { CONTROL('w'), NONE('h') }, call, { .f = editor_window_prev } }, - { { CONTROL('w'), CONTROL('j') }, call, { .f = editor_window_next } }, - { { CONTROL('w'), CONTROL('l') }, call, { .f = editor_window_next } }, - { { CONTROL('w'), CONTROL('k') }, call, { .f = editor_window_prev } }, - { { CONTROL('w'), CONTROL('w') }, call, { .f = editor_window_next } }, - { { CONTROL('w'), CONTROL('h') }, call, { .f = editor_window_prev } }, - { { CONTROL('w'), KEY(BACKSPACE) }, call, { .f = editor_window_prev } }, - { { CONTROL('B') }, wscroll, { .i = -PAGE } }, - { { CONTROL('F') }, wscroll, { .i = +PAGE } }, - { { CONTROL('U') }, wscroll, { .i = -PAGE_HALF } }, - { { CONTROL('D') }, wscroll, { .i = +PAGE_HALF } }, - { { CONTROL('E') }, wslide, { .i = -1 } }, - { { CONTROL('Y') }, wslide, { .i = +1 } }, - { { CONTROL('O') }, jumplist, { .i = -1 } }, - { { CONTROL('I') }, jumplist, { .i = +1 } }, - { { NONE('g'), NONE(';') }, changelist, { .i = -1 } }, - { { NONE('g'), NONE(',') }, changelist, { .i = +1 } }, - { { NONE('a') }, insertmode, { .i = MOVE_CHAR_NEXT } }, - { { NONE('A') }, insertmode, { .i = MOVE_LINE_END } }, - { { NONE('C') }, change, { .i = MOVE_LINE_END } }, - { { NONE('D') }, delete, { .i = MOVE_LINE_END } }, - { { NONE('I') }, insertmode, { .i = MOVE_LINE_START } }, - { { NONE('.') }, repeat, { NULL } }, - { { NONE('o') }, openline, { .i = MOVE_LINE_NEXT } }, - { { NONE('O') }, openline, { .i = MOVE_LINE_PREV } }, - { { NONE('J') }, join, { .i = MOVE_LINE_NEXT } }, - { { NONE('x') }, delete, { .i = MOVE_CHAR_NEXT } }, - { { NONE('r') }, replace, { NULL } }, - { { NONE('i') }, switchmode, { .i = VIS_MODE_INSERT } }, - { { NONE('v') }, switchmode, { .i = VIS_MODE_VISUAL } }, - { { NONE('V') }, switchmode, { .i = VIS_MODE_VISUAL_LINE } }, - { { NONE('R') }, switchmode, { .i = VIS_MODE_REPLACE } }, - { { NONE('S') }, operator_twice, { .i = OP_CHANGE } }, - { { NONE('s') }, change, { .i = MOVE_CHAR_NEXT } }, - { { NONE('Y') }, operator_twice, { .i = OP_YANK } }, - { { NONE('X') }, delete, { .i = MOVE_CHAR_PREV } }, - { { NONE('u') }, undo, { NULL } }, - { { CONTROL('R') }, redo, { NULL } }, - { { NONE('g'), NONE('+') }, later, { NULL } }, - { { NONE('g'), NONE('-') }, earlier, { NULL } }, - { { CONTROL('L') }, call, { .f = editor_draw } }, - { { NONE(':') }, prompt_cmd, { .s = "" } }, - { { NONE('Z'), NONE('Z') }, cmd, { .s = "wq" } }, - { { NONE('Z'), NONE('Q') }, cmd, { .s = "q!" } }, - { { NONE('z'), NONE('t') }, window, { .w = view_redraw_top } }, - { { NONE('z'), NONE('z') }, window, { .w = view_redraw_center } }, - { { NONE('z'), NONE('b') }, window, { .w = view_redraw_bottom } }, - { { NONE('q') }, macro_record, { NULL } }, - { { NONE('@') }, macro_replay, { NULL } }, - { { NONE('g'), NONE('v') }, selection_restore, { NULL } }, - { /* empty last element, array terminator */ }, + { "", cursors_clear, { } }, + { "", cursors_new, { .i = -1 } }, + { "", cursors_new, { .i = +1 } }, + { "", cursors_align, { } }, + { "", cursors_select, { } }, + { "", cursors_remove, { } }, + { "n", cmd, { .s = "open" } }, + { "c", cmd, { .s = "q" } }, + { "s", cmd, { .s = "split" } }, + { "v", cmd, { .s = "vsplit" } }, + { "j", call, { .f = editor_window_next } }, + { "l", call, { .f = editor_window_next } }, + { "k", call, { .f = editor_window_prev } }, + { "h", call, { .f = editor_window_prev } }, + { "", call, { .f = editor_window_next } }, + { "", call, { .f = editor_window_next } }, + { "", call, { .f = editor_window_prev } }, + { "", call, { .f = editor_window_next } }, + { "", call, { .f = editor_window_prev } }, + { "", call, { .f = editor_window_prev } }, + { "", wscroll, { .i = -PAGE } }, + { "", wscroll, { .i = +PAGE } }, + { "", wscroll, { .i = -PAGE_HALF } }, + { "", wscroll, { .i = +PAGE_HALF } }, + { "", wslide, { .i = -1 } }, + { "", wslide, { .i = +1 } }, + { "", jumplist, { .i = -1 } }, + { "", jumplist, { .i = +1 } }, + { "g;", changelist, { .i = -1 } }, + { "g,", changelist, { .i = +1 } }, + { "a", insertmode, { .i = MOVE_CHAR_NEXT } }, + { "A", insertmode, { .i = MOVE_LINE_END } }, + { "C", change, { .i = MOVE_LINE_END } }, + { "D", delete, { .i = MOVE_LINE_END } }, + { "I", insertmode, { .i = MOVE_LINE_START } }, + { ".", repeat, { NULL } }, + { "o", openline, { .i = MOVE_LINE_NEXT } }, + { "O", openline, { .i = MOVE_LINE_PREV } }, + { "J", join, { .i = MOVE_LINE_NEXT } }, + { "x", delete, { .i = MOVE_CHAR_NEXT } }, + { "r", replace, { NULL } }, + { "i", switchmode, { .i = VIS_MODE_INSERT } }, + { "v", switchmode, { .i = VIS_MODE_VISUAL } }, + { "V", switchmode, { .i = VIS_MODE_VISUAL_LINE } }, + { "R", switchmode, { .i = VIS_MODE_REPLACE } }, + { "S", operator_twice, { .i = OP_CHANGE } }, + { "s", change, { .i = MOVE_CHAR_NEXT } }, + { "Y", operator_twice, { .i = OP_YANK } }, + { "X", delete, { .i = MOVE_CHAR_PREV } }, + { "u", undo, { NULL } }, + { "", redo, { NULL } }, + { "g+", later, { NULL } }, + { "g-", earlier, { NULL } }, + { "", call, { .f = editor_draw } }, + { ":", prompt_cmd, { .s = "" } }, + { "ZZ", cmd, { .s = "wq" } }, + { "ZQ", cmd, { .s = "q!" } }, + { "zt", window, { .w = view_redraw_top } }, + { "zz", window, { .w = view_redraw_center } }, + { "zb", window, { .w = view_redraw_bottom } }, + { "q", macro_record, { NULL } }, + { "@", macro_replay, { NULL } }, + { "gv", selection_restore, { NULL } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_mode_visual[] = { - { { CONTROL('N') }, cursors_select_next, { } }, - { { CONTROL('X') }, cursors_select_skip, { } }, - { { CONTROL('P') }, cursors_remove, { } }, - { { NONE('I') }, cursors_split, { .i = -1 } }, - { { NONE('A') }, cursors_split, { .i = +1 } }, - { { KEY(BACKSPACE) }, operator, { .i = OP_DELETE } }, - { { KEY(DELETE) }, operator, { .i = OP_DELETE } }, - { { NONE(ESC) }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { CONTROL('c') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { NONE('v') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { NONE('V') }, switchmode, { .i = VIS_MODE_VISUAL_LINE } }, - { { NONE(':') }, prompt_cmd, { .s = "'<,'>" } }, - { { CONTROL('H') }, operator, { .i = OP_DELETE } }, - { { NONE('d') }, operator, { .i = OP_DELETE } }, - { { NONE('x') }, operator, { .i = OP_DELETE } }, - { { NONE('y') }, operator, { .i = OP_YANK } }, - { { NONE('c') }, operator, { .i = OP_CHANGE } }, - { { NONE('r') }, operator, { .i = OP_CHANGE } }, - { { NONE('s') }, operator, { .i = OP_CHANGE } }, - { { NONE('J') }, operator, { .i = OP_JOIN } }, - { { NONE('o') }, selection_end, { NULL } }, + { "", cursors_select_next, { } }, + { "", cursors_select_skip, { } }, + { "", cursors_remove, { } }, + { "I", cursors_split, { .i = -1 } }, + { "A", cursors_split, { .i = +1 } }, + { "", operator, { .i = OP_DELETE } }, + { "", operator, { .i = OP_DELETE } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "v", switchmode, { .i = VIS_MODE_NORMAL } }, + { "V", switchmode, { .i = VIS_MODE_VISUAL_LINE } }, + { ":", prompt_cmd, { .s = "'<,'>" } }, + { "", operator, { .i = OP_DELETE } }, + { "d", operator, { .i = OP_DELETE } }, + { "x", operator, { .i = OP_DELETE } }, + { "y", operator, { .i = OP_YANK } }, + { "c", operator, { .i = OP_CHANGE } }, + { "r", operator, { .i = OP_CHANGE } }, + { "s", operator, { .i = OP_CHANGE } }, + { "J", operator, { .i = OP_JOIN } }, + { "o", selection_end, { NULL } }, { /* empty last element, array terminator */ }, }; @@ -479,9 +472,9 @@ static void vis_mode_visual_leave(Mode *new) { } static KeyBinding vis_mode_visual_line[] = { - { { NONE('v') }, switchmode, { .i = VIS_MODE_VISUAL } }, - { { NONE('V') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { /* empty last element, array terminator */ }, + { "v", switchmode, { .i = VIS_MODE_VISUAL } }, + { "V", switchmode, { .i = VIS_MODE_NORMAL } }, + { /* empty last element, array terminator */ }, }; static void vis_mode_visual_line_enter(Mode *old) { @@ -503,28 +496,27 @@ static void vis_mode_visual_line_leave(Mode *new) { } static KeyBinding vis_mode_readline[] = { - { { KEY(BACKSPACE) }, delete, { .i = MOVE_CHAR_PREV } }, - { { NONE(ESC) }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { CONTROL('c') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { CONTROL('D') }, delete , { .i = MOVE_CHAR_NEXT } }, - { { CONTROL('W') }, delete, { .i = MOVE_LONGWORD_START_PREV } }, - { { CONTROL('U') }, delete, { .i = MOVE_LINE_BEGIN } }, - { /* empty last element, array terminator */ }, + { "", delete, { .i = MOVE_CHAR_PREV } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", delete , { .i = MOVE_CHAR_NEXT } }, + { "", delete, { .i = MOVE_LONGWORD_START_PREV } }, + { "", delete, { .i = MOVE_LINE_BEGIN } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_mode_prompt[] = { - { { KEY(BACKSPACE) }, prompt_backspace,{ .s = NULL } }, - { { NONE('\n') }, prompt_enter, { NULL } }, - { { NONE('\r') }, prompt_enter, { NULL } }, - { { CONTROL('J') }, prompt_enter, { NULL } }, - { { KEY(UP) }, prompt_up, { NULL } }, - { { KEY(DOWN) }, prompt_down, { NULL } }, - { { KEY(HOME) }, movement, { .i = MOVE_FILE_BEGIN } }, - { { CONTROL('B') }, movement, { .i = MOVE_FILE_BEGIN } }, - { { KEY(END) }, movement, { .i = MOVE_FILE_END } }, - { { CONTROL('E') }, movement, { .i = MOVE_FILE_END } }, - { { NONE('\t') }, NULL, { NULL } }, - { /* empty last element, array terminator */ }, + { "", prompt_backspace,{ .s = NULL } }, + { "", prompt_enter, { NULL } }, + { "", prompt_enter, { NULL } }, + { "", prompt_up, { NULL } }, + { "", prompt_down, { NULL } }, + { "", movement, { .i = MOVE_FILE_BEGIN } }, + { "", movement, { .i = MOVE_FILE_BEGIN } }, + { "", movement, { .i = MOVE_FILE_END } }, + { "", movement, { .i = MOVE_FILE_END } }, + { "", NULL, { NULL } }, + { /* empty last element, array terminator */ }, }; static void vis_mode_prompt_input(const char *str, size_t len) { @@ -542,50 +534,52 @@ static void vis_mode_prompt_leave(Mode *new) { } static KeyBinding vis_mode_insert_register[] = { - { { CONTROL('R'), NONE('a') }, insert_register, { .i = REG_a } }, - { { CONTROL('R'), NONE('b') }, insert_register, { .i = REG_b } }, - { { CONTROL('R'), NONE('c') }, insert_register, { .i = REG_c } }, - { { CONTROL('R'), NONE('d') }, insert_register, { .i = REG_d } }, - { { CONTROL('R'), NONE('e') }, insert_register, { .i = REG_e } }, - { { CONTROL('R'), NONE('f') }, insert_register, { .i = REG_f } }, - { { CONTROL('R'), NONE('g') }, insert_register, { .i = REG_g } }, - { { CONTROL('R'), NONE('h') }, insert_register, { .i = REG_h } }, - { { CONTROL('R'), NONE('i') }, insert_register, { .i = REG_i } }, - { { CONTROL('R'), NONE('j') }, insert_register, { .i = REG_j } }, - { { CONTROL('R'), NONE('k') }, insert_register, { .i = REG_k } }, - { { CONTROL('R'), NONE('l') }, insert_register, { .i = REG_l } }, - { { CONTROL('R'), NONE('m') }, insert_register, { .i = REG_m } }, - { { CONTROL('R'), NONE('n') }, insert_register, { .i = REG_n } }, - { { CONTROL('R'), NONE('o') }, insert_register, { .i = REG_o } }, - { { CONTROL('R'), NONE('p') }, insert_register, { .i = REG_p } }, - { { CONTROL('R'), NONE('q') }, insert_register, { .i = REG_q } }, - { { CONTROL('R'), NONE('r') }, insert_register, { .i = REG_r } }, - { { CONTROL('R'), NONE('s') }, insert_register, { .i = REG_s } }, - { { CONTROL('R'), NONE('t') }, insert_register, { .i = REG_t } }, - { { CONTROL('R'), NONE('u') }, insert_register, { .i = REG_u } }, - { { CONTROL('R'), NONE('v') }, insert_register, { .i = REG_v } }, - { { CONTROL('R'), NONE('w') }, insert_register, { .i = REG_w } }, - { { CONTROL('R'), NONE('x') }, insert_register, { .i = REG_x } }, - { { CONTROL('R'), NONE('y') }, insert_register, { .i = REG_y } }, - { { CONTROL('R'), NONE('z') }, insert_register, { .i = REG_z } }, - { /* empty last element, array terminator */ }, + { "a", insert_register, { .i = REG_a } }, + { "b", insert_register, { .i = REG_b } }, + { "c", insert_register, { .i = REG_c } }, + { "d", insert_register, { .i = REG_d } }, + { "e", insert_register, { .i = REG_e } }, + { "f", insert_register, { .i = REG_f } }, + { "g", insert_register, { .i = REG_g } }, + { "h", insert_register, { .i = REG_h } }, + { "i", insert_register, { .i = REG_i } }, + { "j", insert_register, { .i = REG_j } }, + { "k", insert_register, { .i = REG_k } }, + { "l", insert_register, { .i = REG_l } }, + { "m", insert_register, { .i = REG_m } }, + { "n", insert_register, { .i = REG_n } }, + { "o", insert_register, { .i = REG_o } }, + { "p", insert_register, { .i = REG_p } }, + { "q", insert_register, { .i = REG_q } }, + { "r", insert_register, { .i = REG_r } }, + { "s", insert_register, { .i = REG_s } }, + { "t", insert_register, { .i = REG_t } }, + { "u", insert_register, { .i = REG_u } }, + { "v", insert_register, { .i = REG_v } }, + { "w", insert_register, { .i = REG_w } }, + { "x", insert_register, { .i = REG_x } }, + { "y", insert_register, { .i = REG_y } }, + { "z", insert_register, { .i = REG_z } }, + { /* empty last element, array terminator */ }, }; static KeyBinding vis_mode_insert[] = { - { { CONTROL('L') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { CONTROL('[') }, switchmode, { .i = VIS_MODE_NORMAL } }, - { { CONTROL('I') }, insert_tab, { NULL } }, - { { CONTROL('J') }, insert_newline, { NULL } }, - { { CONTROL('M') }, insert_newline, { NULL } }, - { { CONTROL('O') }, switchmode, { .i = VIS_MODE_OPERATOR } }, - { { CONTROL('V') }, insert_verbatim, { NULL } }, - { { CONTROL('D') }, operator_twice, { .i = OP_SHIFT_LEFT } }, - { { CONTROL('T') }, operator_twice, { .i = OP_SHIFT_RIGHT } }, - { { CONTROL('X'), CONTROL('E') }, wslide, { .i = -1 } }, - { { CONTROL('X'), CONTROL('Y') }, wslide, { .i = +1 } }, - { { NONE('\t') }, insert_tab, { NULL } }, - { { KEY(END) }, movement, { .i = MOVE_LINE_END } }, - { /* empty last element, array terminator */ }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, + { "", insert_tab, { NULL } }, + { "", insert_newline, { NULL } }, + { "", insert_newline, { NULL } }, + { "", insert_newline, { NULL } }, + { "", switchmode, { .i = VIS_MODE_OPERATOR } }, + { "", insert_verbatim, { NULL } }, + { "", operator_twice, { .i = OP_SHIFT_LEFT } }, + { "", operator_twice, { .i = OP_SHIFT_RIGHT } }, + { "", wslide, { .i = -1 } }, + { "", wslide, { .i = +1 } }, + { "", insert_tab, { NULL } }, + { "", movement, { .i = MOVE_LINE_END } }, + { /* empty last element, array terminator */ }, }; static void vis_mode_insert_leave(Mode *old) { @@ -610,7 +604,7 @@ static void vis_mode_insert_input(const char *str, size_t len) { } static KeyBinding vis_mode_replace[] = { - { { NONE(ESC) }, switchmode, { .i = VIS_MODE_NORMAL } }, + { "", switchmode, { .i = VIS_MODE_NORMAL } }, { /* empty last element, array terminator */ }, }; @@ -677,46 +671,46 @@ static Mode vis_modes[] = { [VIS_MODE_BASIC] = { .name = "BASIC", .parent = NULL, - .bindings = basic_movement, + .default_bindings = basic_movement, }, [VIS_MODE_MARK] = { .name = "MARK", .common_prefix = true, .parent = &vis_modes[VIS_MODE_BASIC], - .bindings = vis_marks, + .default_bindings = vis_marks, }, [VIS_MODE_MARK_LINE] = { .name = "MARK-LINE", .common_prefix = true, .parent = &vis_modes[VIS_MODE_MARK], - .bindings = vis_marks_line, + .default_bindings = vis_marks_line, }, [VIS_MODE_MOVE] = { .name = "MOVE", .parent = &vis_modes[VIS_MODE_MARK_LINE], - .bindings = vis_movements, + .default_bindings = vis_movements, }, [VIS_MODE_INNER_TEXTOBJ] = { .name = "INNER-TEXTOBJ", .common_prefix = true, .parent = &vis_modes[VIS_MODE_MOVE], - .bindings = vis_inner_textobjs, + .default_bindings = vis_inner_textobjs, }, [VIS_MODE_TEXTOBJ] = { .name = "TEXTOBJ", .common_prefix = true, .parent = &vis_modes[VIS_MODE_INNER_TEXTOBJ], - .bindings = vis_textobjs, + .default_bindings = vis_textobjs, }, [VIS_MODE_OPERATOR_OPTION] = { .name = "OPERATOR-OPTION", .parent = &vis_modes[VIS_MODE_TEXTOBJ], - .bindings = vis_operator_options, + .default_bindings = vis_operator_options, }, [VIS_MODE_OPERATOR] = { .name = "OPERATOR", .parent = &vis_modes[VIS_MODE_MOVE], - .bindings = vis_operators, + .default_bindings = vis_operators, .enter = vis_mode_operator_enter, .leave = vis_mode_operator_leave, .input = vis_mode_operator_input, @@ -725,25 +719,25 @@ static Mode vis_modes[] = { .name = "REGISTER", .common_prefix = true, .parent = &vis_modes[VIS_MODE_OPERATOR], - .bindings = vis_registers, + .default_bindings = vis_registers, }, [VIS_MODE_MARK_SET] = { .name = "MARK-SET", .common_prefix = true, .parent = &vis_modes[VIS_MODE_REGISTER], - .bindings = vis_marks_set, + .default_bindings = vis_marks_set, }, [VIS_MODE_NORMAL] = { .name = "NORMAL", .isuser = true, .parent = &vis_modes[VIS_MODE_MARK_SET], - .bindings = vis_mode_normal, + .default_bindings = vis_mode_normal, }, [VIS_MODE_VISUAL] = { .name = "--VISUAL--", .isuser = true, .parent = &vis_modes[VIS_MODE_REGISTER], - .bindings = vis_mode_visual, + .default_bindings = vis_mode_visual, .enter = vis_mode_visual_enter, .leave = vis_mode_visual_leave, .visual = true, @@ -752,7 +746,7 @@ static Mode vis_modes[] = { .name = "--VISUAL LINE--", .isuser = true, .parent = &vis_modes[VIS_MODE_VISUAL], - .bindings = vis_mode_visual_line, + .default_bindings = vis_mode_visual_line, .enter = vis_mode_visual_line_enter, .leave = vis_mode_visual_line_leave, .visual = true, @@ -760,13 +754,13 @@ static Mode vis_modes[] = { [VIS_MODE_READLINE] = { .name = "READLINE", .parent = &vis_modes[VIS_MODE_BASIC], - .bindings = vis_mode_readline, + .default_bindings = vis_mode_readline, }, [VIS_MODE_PROMPT] = { .name = "PROMPT", .isuser = true, .parent = &vis_modes[VIS_MODE_READLINE], - .bindings = vis_mode_prompt, + .default_bindings = vis_mode_prompt, .input = vis_mode_prompt_input, .enter = vis_mode_prompt_enter, .leave = vis_mode_prompt_leave, @@ -775,13 +769,13 @@ static Mode vis_modes[] = { .name = "INSERT-REGISTER", .common_prefix = true, .parent = &vis_modes[VIS_MODE_READLINE], - .bindings = vis_mode_insert_register, + .default_bindings = vis_mode_insert_register, }, [VIS_MODE_INSERT] = { .name = "--INSERT--", .isuser = true, .parent = &vis_modes[VIS_MODE_INSERT_REGISTER], - .bindings = vis_mode_insert, + .default_bindings = vis_mode_insert, .leave = vis_mode_insert_leave, .input = vis_mode_insert_input, .idle = vis_mode_insert_idle, @@ -791,7 +785,7 @@ static Mode vis_modes[] = { .name = "--REPLACE--", .isuser = true, .parent = &vis_modes[VIS_MODE_INSERT], - .bindings = vis_mode_replace, + .default_bindings = vis_mode_replace, .leave = vis_mode_replace_leave, .input = vis_mode_replace_input, .idle = vis_mode_insert_idle, -- cgit v1.2.3