diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-04-21 08:52:49 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-04-21 11:06:10 +0200 |
| commit | d941d9cbc8891c745c11edfd6211c3bb69626991 (patch) | |
| tree | b50c3fdcff18af7eb937916cd9d9c44529fb6281 | |
| parent | aca46a0da8969f15d9356c149687f961b6852516 (diff) | |
| download | vis-d941d9cbc8891c745c11edfd6211c3bb69626991.tar.gz vis-d941d9cbc8891c745c11edfd6211c3bb69626991.tar.xz | |
Implement ';' and ','
This fixes #45
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | config.def.h | 2 | ||||
| -rw-r--r-- | editor.h | 1 | ||||
| -rw-r--r-- | vis.c | 32 |
4 files changed, 37 insertions, 0 deletions
@@ -352,6 +352,8 @@ and their current support in vis. t{char} (till before next occurrence of char to the right) F{char} (to next occurrence of char to the left) T{char} (till before next occurrence of char to the left) + ; (repeat last to/till movement) + , (repeat last to/till movement but in opposite direction) /{text} (to next match of text in forward direction) ?{text} (to next match of text in backward direction) diff --git a/config.def.h b/config.def.h index e91eddd..bb7d86e 100644 --- a/config.def.h +++ b/config.def.h @@ -142,6 +142,8 @@ static KeyBinding vis_movements[] = { { { 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 = "?" } }, { /* empty last element, array terminator */ }, @@ -230,6 +230,7 @@ struct Editor { char prompt_type; /* command ':' or search '/','?' prompt */ Regex *search_pattern; /* last used search pattern */ char search_char[8]; /* last used character to search for via 'f', 'F', 't', 'T' */ + int last_totill; /* last to/till movement used for ';' and ',' */ int tabwidth; /* how many spaces should be used to display a tab */ bool expandtab; /* whether typed tabs should be converted to spaces */ bool autoindent; /* whether indentation should be copied from previous line on newline */ @@ -303,6 +303,10 @@ static void join(const Arg *arg); static void cmd(const Arg *arg); /* perform last action i.e. action_prev again */ static void repeat(const Arg *arg); +/* repeat last to/till movement */ +static void totill_repeat(const Arg *arg); +/* repeat last to/till movement but in opposite direction */ +static void totill_reverse(const Arg *arg); /* replace character at cursor with one read form keyboard */ static void replace(const Arg *arg); /* adjust action.count by arg->i */ @@ -774,6 +778,33 @@ static void repeat(const Arg *arg) { action_do(&vis->action); } +static void totill_repeat(const Arg *arg) { + if (!vis->last_totill) + return; + movement(&(const Arg){ .i = vis->last_totill }); +} + +static void totill_reverse(const Arg *arg) { + int type = vis->last_totill; + switch (type) { + case MOVE_RIGHT_TO: + type = MOVE_LEFT_TO; + break; + case MOVE_LEFT_TO: + type = MOVE_RIGHT_TO; + break; + case MOVE_RIGHT_TILL: + type = MOVE_LEFT_TILL; + break; + case MOVE_LEFT_TILL: + type = MOVE_RIGHT_TILL; + break; + default: + return; + } + movement(&(const Arg){ .i = type }); +} + static void replace(const Arg *arg) { Key k = getkey(); if (!k.str[0]) @@ -843,6 +874,7 @@ static void movement_key(const Arg *arg) { return; } strncpy(vis->search_char, k.str, sizeof(vis->search_char)); + vis->last_totill = arg->i; vis->action.movement = &moves[arg->i]; action_do(&vis->action); } |
