diff options
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | register.c | 2 | ||||
| -rw-r--r-- | register.h | 1 | ||||
| -rw-r--r-- | vis.c | 9 | ||||
| -rw-r--r-- | vis.h | 8 |
5 files changed, 20 insertions, 2 deletions
@@ -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] == '_') @@ -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: { @@ -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, @@ -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; @@ -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 */ |
