aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-01-30 20:30:10 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-01-30 23:48:40 +0100
commit63d240ec45b2a62899f19f9f1fc4a18160cd0991 (patch)
tree8969db1c38acb5ea6501a2ea60cd63ab48e9f75f
parentc9662de55d78baa82dfcac1afab170a0d8e4f163 (diff)
downloadvis-63d240ec45b2a62899f19f9f1fc4a18160cd0991.tar.gz
vis-63d240ec45b2a62899f19f9f1fc4a18160cd0991.tar.xz
Implement "A - "Z registers
-rw-r--r--main.c2
-rw-r--r--register.c2
-rw-r--r--register.h1
-rw-r--r--vis.c9
-rw-r--r--vis.h8
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 */