vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 60964f0ab5012977cf7bbcbec9e34a015d3ba012
parent 5c188b0a46f39af257cf730cc4476837b4c55cee
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat, 30 Jan 2016 20:30:10 +0100

Implement "A - "Z registers

Diffstat:
Mmain.c | 2++
Mregister.c | 2++
Mregister.h | 1+
Mvis.c | 9++++++++-
Mvis.h | 8+++++++-
5 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/main.c b/main.c @@ -1306,6 +1306,8 @@ static const char *key2register(Vis *vis, const char *keys, enum VisRegister *re return NULL; if (keys[0] >= 'a' && keys[0] <= 'z') *reg = keys[0] - 'a'; + else if (keys[0] >= 'A' && keys[0] <= 'Z') + *reg = VIS_REG_A + keys[0] - 'A'; else if (keys[0] == '*' || keys[0] == '+') *reg = VIS_REG_CLIPBOARD; else if (keys[0] == '_') diff --git a/register.c b/register.c @@ -59,6 +59,8 @@ const char *register_get(Vis *vis, Register *reg, size_t *len) { } bool register_put(Vis *vis, Register *reg, Text *txt, Filerange *range) { + if (reg->append) + return register_append(reg, txt, range); switch (reg->type) { case REGISTER_NORMAL: { diff --git a/register.h b/register.h @@ -13,6 +13,7 @@ typedef struct Vis Vis; typedef struct { Buffer buf; bool linewise; /* place register content on a new line when inserting? */ + bool append; enum { REGISTER_NORMAL, REGISTER_BLACKHOLE, diff --git a/vis.c b/vis.c @@ -1000,11 +1000,18 @@ void vis_count_set(Vis *vis, int count) { } void vis_register_set(Vis *vis, enum VisRegister reg) { - if (reg < LENGTH(vis->registers)) + if (reg >= VIS_REG_A && reg <= VIS_REG_Z) { + vis->action.reg = &vis->registers[reg - VIS_REG_A]; + vis->action.reg->append = true; + } else if (reg < LENGTH(vis->registers)) { vis->action.reg = &vis->registers[reg]; + vis->action.reg->append = false; + } } const char *vis_register_get(Vis *vis, enum VisRegister reg, size_t *len) { + if (reg >= VIS_REG_A && reg <= VIS_REG_Z) + reg -= VIS_REG_A; if (reg < LENGTH(vis->registers)) return register_get(vis, &vis->registers[reg], len); *len = 0; diff --git a/vis.h b/vis.h @@ -351,7 +351,13 @@ enum VisRegister { VIS_REG_BLACKHOLE, /* /dev/null register */ VIS_REG_CLIPBOARD, /* system clipboard register */ VIS_REG_PROMPT, /* internal register which shadows DEFAULT in PROMPT mode */ - VIS_REG_INVALID, /* has to be the last enum member */ + VIS_REG_INVALID, /* has to be the last 'real' register */ + VIS_REG_A, VIS_REG_B, VIS_REG_C, VIS_REG_D, VIS_REG_E, + VIS_REG_F, VIS_REG_G, VIS_REG_H, VIS_REG_I, VIS_REG_J, + VIS_REG_K, VIS_REG_L, VIS_REG_M, VIS_REG_N, VIS_REG_O, + VIS_REG_P, VIS_REG_Q, VIS_REG_R, VIS_REG_S, VIS_REG_T, + VIS_REG_U, VIS_REG_V, VIS_REG_W, VIS_REG_X, VIS_REG_Y, + VIS_REG_Z, }; /* set the register to use, if none is given the DEFAULT register is used */