From 63d240ec45b2a62899f19f9f1fc4a18160cd0991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sat, 30 Jan 2016 20:30:10 +0100 Subject: Implement "A - "Z registers --- main.c | 2 ++ register.c | 2 ++ register.h | 1 + vis.c | 9 ++++++++- vis.h | 8 +++++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 077ed77..918f4c8 100644 --- 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 index a15e8b3..518f93a 100644 --- 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 index d3f7b7f..c8f11bd 100644 --- 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 index b6d6b49..b65724c 100644 --- 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 index 00d95a6..3bcd9c7 100644 --- 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 */ -- cgit v1.2.3