aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-01-10 21:26:23 +0100
committerMarc André Tanner <mat@brain-dump.org>2017-01-10 22:44:23 +0100
commitb95e52adb89c56a135c25f22910acb5e28f2a7fb (patch)
treefa4a9325f2ccebe7b32ca1270f3bb9b881ac94d4 /vis.c
parent2d59aeebe70690f3e0a49528cf5205abaf907985 (diff)
downloadvis-b95e52adb89c56a135c25f22910acb5e28f2a7fb.tar.gz
vis-b95e52adb89c56a135c25f22910acb5e28f2a7fb.tar.xz
vis: add register description to :help output
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/vis.c b/vis.c
index 1cd5b8f..691c3fc 100644
--- a/vis.c
+++ b/vis.c
@@ -34,6 +34,17 @@ const MarkDef vis_marks[] = {
[VIS_MARK_SELECTION_END] = { '>', "Last selection end" },
};
+const RegisterDef vis_registers[] = {
+ [VIS_REG_DEFAULT] = { '"', "Unnamed register" },
+ [VIS_REG_ZERO] = { '0', "Yank register" },
+ [VIS_REG_BLACKHOLE] = { '_', "/dev/null register" },
+ [VIS_REG_CLIPBOARD] = { '*', "System clipboard register, see vis-clipboard(1)" },
+ [VIS_MACRO_REPEAT] = { '.', "Last inserted text" },
+ [VIS_REG_SEARCH] = { '/', "Last search pattern" },
+ [VIS_REG_COMMAND] = { ':', "Last :-command" },
+ [VIS_REG_SHELL] = { '!', "Last shell command given to either <, >, |, or !" },
+};
+
static Macro *macro_get(Vis *vis, enum VisRegister);
static void macro_replay(Vis *vis, const Macro *macro);
static void vis_keys_push(Vis *vis, const char *input, size_t pos, bool record);
@@ -1296,26 +1307,24 @@ void vis_count_set(Vis *vis, int count) {
enum VisRegister vis_register_from(Vis *vis, char reg) {
switch (reg) {
- case '*': /* fall through */
case '+': return VIS_REG_CLIPBOARD;
- case '_': return VIS_REG_BLACKHOLE;
- case '0': return VIS_REG_ZERO;
case '@': return VIS_MACRO_LAST_RECORDED;
- case '/': return VIS_REG_SEARCH;
- case ':': return VIS_REG_COMMAND;
- case '!': return VIS_REG_SHELL;
- default:
- if ('a' <= reg && reg <= 'z')
- return VIS_REG_a + reg - 'a';
- else if ('A' <= reg && reg <= 'Z')
- return VIS_REG_A + reg - 'A';
- return VIS_REG_INVALID;
}
+
+ if ('a' <= reg && reg <= 'z')
+ return VIS_REG_a + reg - 'a';
+ if ('A' <= reg && reg <= 'Z')
+ return VIS_REG_A + reg - 'A';
+ for (size_t i = 0; i < LENGTH(vis_registers); i++) {
+ if (vis_registers[i].name == reg)
+ return i;
+ }
+ return VIS_REG_INVALID;
}
void vis_register_set(Vis *vis, enum VisRegister reg) {
- if (reg >= VIS_REG_A && reg <= VIS_REG_Z) {
- vis->action.reg = &vis->registers[reg - VIS_REG_A];
+ if (VIS_REG_A <= reg && reg <= VIS_REG_Z) {
+ vis->action.reg = &vis->registers[VIS_REG_a + reg - VIS_REG_A];
vis->action.reg->append = true;
} else if (reg < LENGTH(vis->registers)) {
vis->action.reg = &vis->registers[reg];
@@ -1325,7 +1334,7 @@ void vis_register_set(Vis *vis, enum VisRegister reg) {
const char *vis_register_get(Vis *vis, enum VisRegister reg, size_t *len) {
if (VIS_REG_A <= reg && reg <= VIS_REG_Z)
- reg -= VIS_REG_A;
+ reg = VIS_REG_a + reg - VIS_REG_A;
if (reg < LENGTH(vis->registers))
return register_get(vis, &vis->registers[reg], len);
*len = 0;