diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-01-30 20:11:52 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-01-30 20:11:52 +0100 |
| commit | d94bb93f10365a39d90cc0d4d4b151fc797767df (patch) | |
| tree | 8d92fd4fa5837db74a3360e551a5243906bf2fa4 | |
| parent | f0e0c0991c5a3d50582678e1b05d83d375057709 (diff) | |
| download | vis-d94bb93f10365a39d90cc0d4d4b151fc797767df.tar.gz vis-d94bb93f10365a39d90cc0d4d4b151fc797767df.tar.xz | |
Implement blackhole register "_
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | register.c | 43 | ||||
| -rw-r--r-- | register.h | 4 | ||||
| -rw-r--r-- | vis.c | 1 | ||||
| -rw-r--r-- | vis.h | 1 |
5 files changed, 41 insertions, 10 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] == '_') + *reg = VIS_REG_BLACKHOLE; return keys+1; } @@ -11,22 +11,45 @@ void register_release(Register *reg) { } const char *register_get(Register *reg, size_t *len) { - *len = reg->buf.len; - return reg->buf.data; + switch (reg->type) { + case REGISTER_NORMAL: + *len = reg->buf.len; + return reg->buf.data; + case REGISTER_BLACKHOLE: + default: + *len = 0; + return NULL; + } } bool register_put(Register *reg, Text *txt, Filerange *range) { - size_t len = text_range_size(range); - if (!buffer_grow(®->buf, len)) + switch (reg->type) { + case REGISTER_NORMAL: + { + size_t len = text_range_size(range); + if (!buffer_grow(®->buf, len)) + return false; + reg->buf.len = text_bytes_get(txt, range->start, len, reg->buf.data); + return true; + } + case REGISTER_BLACKHOLE: + return true; + default: return false; - reg->buf.len = text_bytes_get(txt, range->start, len, reg->buf.data); - return true; + } } bool register_append(Register *reg, Text *txt, Filerange *range) { - size_t len = text_range_size(range); - if (!buffer_grow(®->buf, reg->buf.len + len)) + switch (reg->type) { + case REGISTER_NORMAL: + { + size_t len = text_range_size(range); + if (!buffer_grow(®->buf, reg->buf.len + len)) + return false; + reg->buf.len += text_bytes_get(txt, range->start, len, reg->buf.data + reg->buf.len); + return true; + } + default: return false; - reg->buf.len += text_bytes_get(txt, range->start, len, reg->buf.data + reg->buf.len); - return true; + } } @@ -9,6 +9,10 @@ typedef struct { Buffer buf; bool linewise; /* place register content on a new line when inserting? */ + enum { + REGISTER_NORMAL, + REGISTER_BLACKHOLE, + } type; } Register; void register_release(Register *reg); @@ -315,6 +315,7 @@ Vis *vis_new(Ui *ui, VisEvent *event) { vis->ui->init(vis->ui, vis); vis->tabwidth = 8; vis->expandtab = false; + vis->registers[VIS_REG_BLACKHOLE].type = REGISTER_BLACKHOLE; action_reset(&vis->action); if (!(vis->search_pattern = text_regex_new())) goto err; @@ -348,6 +348,7 @@ enum VisRegister { VIS_REG_u, VIS_REG_v, VIS_REG_w, VIS_REG_x, VIS_REG_y, VIS_REG_z, VIS_REG_DEFAULT, /* used when no other register is specified */ + VIS_REG_BLACKHOLE, /* /dev/null register */ VIS_REG_PROMPT, /* internal register which shadows DEFAULT in PROMPT mode */ VIS_REG_INVALID, /* has to be the last enum member */ }; |
