aboutsummaryrefslogtreecommitdiff
path: root/config.def.h
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-09-13 17:49:38 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-10-05 15:54:30 +0200
commita76057df97157dc76959bcd40649f5953aebc9d3 (patch)
tree75df46b238edacc60ede00ee5821d47cb814b316 /config.def.h
parentfa950307aeb2a060be72fc73e0017e5497cb4ace (diff)
downloadvis-a76057df97157dc76959bcd40649f5953aebc9d3.tar.gz
vis-a76057df97157dc76959bcd40649f5953aebc9d3.tar.xz
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/
Diffstat (limited to 'config.def.h')
-rw-r--r--config.def.h834
1 files changed, 414 insertions, 420 deletions
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 } },
+ { "<C-z>" , suspend, { NULL } },
+ { "<Left>" , movement, { .i = MOVE_CHAR_PREV } },
+ { "<S-Left>" , movement, { .i = MOVE_LONGWORD_START_PREV } },
+ { "<Right>" , movement, { .i = MOVE_CHAR_NEXT } },
+ { "<S-Right>" , movement, { .i = MOVE_LONGWORD_START_NEXT } },
+ { "<Up>" , movement, { .i = MOVE_LINE_UP } },
+ { "<Down>" , movement, { .i = MOVE_LINE_DOWN } },
+ { "<PageUp>" , wscroll, { .i = -PAGE } },
+ { "<PageDown>" , wscroll, { .i = +PAGE } },
+ { "<Home>" , movement, { .i = MOVE_LINE_START } },
+ { "<End>" , 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 = "?" } },
+ { "<Backspace>" , 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<Up>" , movement, { .i = MOVE_SCREEN_LINE_UP } },
+ { "j" , movement, { .i = MOVE_LINE_DOWN } },
+ { "<C-j>" , movement, { .i = MOVE_LINE_DOWN } },
+ { "<C-n>" , movement, { .i = MOVE_LINE_DOWN } },
+ { "<Enter>" , movement, { .i = MOVE_LINE_DOWN } },
+ { "gj" , movement, { .i = MOVE_SCREEN_LINE_DOWN } },
+ { "g<Down>" , 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 */ },
+ { "<Escape>", cursors_clear, { } },
+ { "<C-k>", cursors_new, { .i = -1 } },
+ { "<C-j>", cursors_new, { .i = +1 } },
+ { "<C-a>", cursors_align, { } },
+ { "<C-n>", cursors_select, { } },
+ { "<C-p>", cursors_remove, { } },
+ { "<C-w>n", cmd, { .s = "open" } },
+ { "<C-w>c", cmd, { .s = "q" } },
+ { "<C-w>s", cmd, { .s = "split" } },
+ { "<C-w>v", cmd, { .s = "vsplit" } },
+ { "<C-w>j", call, { .f = editor_window_next } },
+ { "<C-w>l", call, { .f = editor_window_next } },
+ { "<C-w>k", call, { .f = editor_window_prev } },
+ { "<C-w>h", call, { .f = editor_window_prev } },
+ { "<C-w><C-j>", call, { .f = editor_window_next } },
+ { "<C-w><C-l>", call, { .f = editor_window_next } },
+ { "<C-w><C-k>", call, { .f = editor_window_prev } },
+ { "<C-w><C-w>", call, { .f = editor_window_next } },
+ { "<C-w><C-h>", call, { .f = editor_window_prev } },
+ { "<C-w><Backspace>", call, { .f = editor_window_prev } },
+ { "<C-b>", wscroll, { .i = -PAGE } },
+ { "<C-f>", wscroll, { .i = +PAGE } },
+ { "<C-u>", wscroll, { .i = -PAGE_HALF } },
+ { "<C-d>", wscroll, { .i = +PAGE_HALF } },
+ { "<C-e>", wslide, { .i = -1 } },
+ { "<C-y>", wslide, { .i = +1 } },
+ { "<C-o>", jumplist, { .i = -1 } },
+ { "<C-i>", 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 } },
+ { "<C-r>", redo, { NULL } },
+ { "g+", later, { NULL } },
+ { "g-", earlier, { NULL } },
+ { "<C-l>", 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 } },
+ { "<C-n>", cursors_select_next, { } },
+ { "<C-x>", cursors_select_skip, { } },
+ { "<C-p>", cursors_remove, { } },
+ { "I", cursors_split, { .i = -1 } },
+ { "A", cursors_split, { .i = +1 } },
+ { "<Backspace>", operator, { .i = OP_DELETE } },
+ { "<DEL>", operator, { .i = OP_DELETE } },
+ { "<Escape>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-c>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "v", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "V", switchmode, { .i = VIS_MODE_VISUAL_LINE } },
+ { ":", prompt_cmd, { .s = "'<,'>" } },
+ { "<C-h>", 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 */ },
+ { "<Backspace>", delete, { .i = MOVE_CHAR_PREV } },
+ { "<Escape>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-c>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-d>", delete , { .i = MOVE_CHAR_NEXT } },
+ { "<C-w>", delete, { .i = MOVE_LONGWORD_START_PREV } },
+ { "<C-u>", 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 */ },
+ { "<Backspace>", prompt_backspace,{ .s = NULL } },
+ { "<Enter>", prompt_enter, { NULL } },
+ { "<C-j>", prompt_enter, { NULL } },
+ { "<Up>", prompt_up, { NULL } },
+ { "<Down>", prompt_down, { NULL } },
+ { "<Home>", movement, { .i = MOVE_FILE_BEGIN } },
+ { "<C-b>", movement, { .i = MOVE_FILE_BEGIN } },
+ { "<End>", movement, { .i = MOVE_FILE_END } },
+ { "<C-e>", movement, { .i = MOVE_FILE_END } },
+ { "<Tab>", 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 */ },
+ { "<C-r>a", insert_register, { .i = REG_a } },
+ { "<C-r>b", insert_register, { .i = REG_b } },
+ { "<C-r>c", insert_register, { .i = REG_c } },
+ { "<C-r>d", insert_register, { .i = REG_d } },
+ { "<C-r>e", insert_register, { .i = REG_e } },
+ { "<C-r>f", insert_register, { .i = REG_f } },
+ { "<C-r>g", insert_register, { .i = REG_g } },
+ { "<C-r>h", insert_register, { .i = REG_h } },
+ { "<C-r>i", insert_register, { .i = REG_i } },
+ { "<C-r>j", insert_register, { .i = REG_j } },
+ { "<C-r>k", insert_register, { .i = REG_k } },
+ { "<C-r>l", insert_register, { .i = REG_l } },
+ { "<C-r>m", insert_register, { .i = REG_m } },
+ { "<C-r>n", insert_register, { .i = REG_n } },
+ { "<C-r>o", insert_register, { .i = REG_o } },
+ { "<C-r>p", insert_register, { .i = REG_p } },
+ { "<C-r>q", insert_register, { .i = REG_q } },
+ { "<C-r>r", insert_register, { .i = REG_r } },
+ { "<C-r>s", insert_register, { .i = REG_s } },
+ { "<C-r>t", insert_register, { .i = REG_t } },
+ { "<C-r>u", insert_register, { .i = REG_u } },
+ { "<C-r>v", insert_register, { .i = REG_v } },
+ { "<C-r>w", insert_register, { .i = REG_w } },
+ { "<C-r>x", insert_register, { .i = REG_x } },
+ { "<C-r>y", insert_register, { .i = REG_y } },
+ { "<C-r>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 */ },
+ { "<Escape>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-l>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-[>", switchmode, { .i = VIS_MODE_NORMAL } },
+ { "<C-i>", insert_tab, { NULL } },
+ { "<C-j>", insert_newline, { NULL } },
+ { "<C-m>", insert_newline, { NULL } },
+ { "<Enter>", insert_newline, { NULL } },
+ { "<C-o>", switchmode, { .i = VIS_MODE_OPERATOR } },
+ { "<C-v>", insert_verbatim, { NULL } },
+ { "<C-d>", operator_twice, { .i = OP_SHIFT_LEFT } },
+ { "<C-t>", operator_twice, { .i = OP_SHIFT_RIGHT } },
+ { "<C-x><C-e>", wslide, { .i = -1 } },
+ { "<C-x><C-y>", wslide, { .i = +1 } },
+ { "<Tab>", insert_tab, { NULL } },
+ { "<End>", 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 } },
+ { "<Escape>", 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,