diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-04-19 20:05:19 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-04-20 22:47:07 +0200 |
| commit | 9f2210c8ee567c75f43d18313b668aee06eda597 (patch) | |
| tree | f806ed08d5cf1cd9d3947c7f4804f46ad18fbccc | |
| parent | 2c8fcaa8fbb17b99aa5b0f8bfbbe0451dfa509f3 (diff) | |
| download | vis-9f2210c8ee567c75f43d18313b668aee06eda597.tar.gz vis-9f2210c8ee567c75f43d18313b668aee06eda597.tar.xz | |
vis: start cleaning up register related code
Now that register.h is no longer used by view.h we can move the struct
and function declarations to vis-core.h.
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | register.h | 37 | ||||
| -rw-r--r-- | view.h | 1 | ||||
| -rw-r--r-- | vis-core.h | 30 | ||||
| -rw-r--r-- | vis-lua.c | 4 | ||||
| -rw-r--r-- | vis-registers.c (renamed from register.c) | 79 | ||||
| -rw-r--r-- | vis.c | 57 | ||||
| -rw-r--r-- | vis.h | 3 |
8 files changed, 110 insertions, 105 deletions
@@ -2,10 +2,10 @@ REGEX_SRC ?= text-regex.c -SRC = array.c buffer.c libutf.c main.c map.c register.c ring-buffer.c \ +SRC = array.c buffer.c libutf.c main.c map.c ring-buffer.c \ sam.c text.c text-motions.c text-objects.c text-util.c \ ui-terminal.c view.c vis.c vis-lua.c vis-modes.c vis-motions.c \ - vis-operators.c vis-prompt.c vis-text-objects.c $(REGEX_SRC) + vis-operators.c vis-registers.c vis-prompt.c vis-text-objects.c $(REGEX_SRC) ELF = vis vis-menu vis-digraph EXECUTABLES = $(ELF) vis-clipboard vis-complete vis-open diff --git a/register.h b/register.h deleted file mode 100644 index 379da87..0000000 --- a/register.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef REGISTER_H -#define REGISTER_H - -#include <stddef.h> -#include <stdbool.h> -#include "vis.h" -#include "array.h" -#include "text-util.h" - -typedef struct { - Array values; - bool linewise; /* place register content on a new line when inserting? */ - bool append; - enum { - REGISTER_NORMAL, - REGISTER_BLACKHOLE, - REGISTER_CLIPBOARD, - } type; -} Register; - -bool register_init(Register*); -void register_release(Register*); - -const char *register_get(Vis*, Register*, size_t *len); -const char *register_slot_get(Vis*, Register*, size_t slot, size_t *len); - -bool register_put0(Vis*, Register*, const char *data); -bool register_put(Vis*, Register*, const char *data, size_t len); -bool register_slot_put(Vis*, Register*, size_t slot, const char *data, size_t len); - -bool register_put_range(Vis*, Register*, Text*, Filerange*); -bool register_slot_put_range(Vis*, Register*, size_t slot, Text*, Filerange*); - -size_t register_count(Register*); -bool register_resize(Register*, size_t count); - -#endif @@ -10,7 +10,6 @@ typedef struct Selection Selection; #include "text.h" #include "ui.h" -#include "register.h" typedef struct { char data[16]; /* utf8 encoded character displayed in this cell (might be more than @@ -5,12 +5,13 @@ #include "vis.h" #include "sam.h" #include "vis-lua.h" -#include "register.h" #include "text.h" +#include "text-util.h" #include "map.h" #include "ring-buffer.h" #include "array.h" #include "buffer.h" +#include "util.h" /* a mode contains a set of key bindings which are currently valid. * @@ -38,6 +39,17 @@ struct Mode { bool visual; /* whether text selection is possible in this mode */ }; +typedef struct { + Array values; + bool linewise; /* place register content on a new line when inserting? */ + bool append; + enum { + REGISTER_NORMAL, + REGISTER_BLACKHOLE, + REGISTER_CLIPBOARD, + } type; +} Register; + struct OperatorContext { int count; /* how many times should the command be executed? */ Register *reg; /* always non-NULL, set to a default register */ @@ -258,4 +270,20 @@ Win *window_new_file(Vis*, File*, enum UiOption); const char *file_name_get(File*); void file_name_set(File*, const char *name); +bool register_init(Register*); +void register_release(Register*); + +const char *register_get(Vis*, Register*, size_t *len); +const char *register_slot_get(Vis*, Register*, size_t slot, size_t *len); + +bool register_put0(Vis*, Register*, const char *data); +bool register_put(Vis*, Register*, const char *data, size_t len); +bool register_slot_put(Vis*, Register*, size_t slot, const char *data, size_t len); + +bool register_put_range(Vis*, Register*, Text*, Filerange*); +bool register_slot_put_range(Vis*, Register*, size_t slot, Text*, Filerange*); + +size_t register_count(Register*); +bool register_resize(Register*, size_t count); + #endif @@ -1432,11 +1432,9 @@ static int registers_newindex(lua_State *L) { if (strlen(symbol) != 1) return 0; enum VisRegister reg = vis_register_from(vis, symbol[0]); - if (reg >= VIS_REG_INVALID) - return 0; size_t len; const char *value = luaL_checklstring(L, 3, &len); - register_put(vis, &vis->registers[reg], value, len+1); + vis_register_put(vis, reg, value, len+1); return 0; } diff --git a/register.c b/vis-registers.c index b55a059..f0ebb15 100644 --- a/register.c +++ b/vis-registers.c @@ -2,10 +2,6 @@ #include <string.h> #include "vis-core.h" -#include "text.h" -#include "util.h" -#include "register.h" -#include "buffer.h" static Buffer *register_buffer(Register *reg, size_t slot) { Buffer *buf = array_get(®->values, slot); @@ -176,3 +172,78 @@ size_t register_count(Register *reg) { bool register_resize(Register *reg, size_t count) { return array_truncate(®->values, count); } + +enum VisRegister vis_register_from(Vis *vis, char reg) { + switch (reg) { + case '+': return VIS_REG_CLIPBOARD; + case '@': return VIS_MACRO_LAST_RECORDED; + } + + if ('a' <= reg && reg <= 'z') + return VIS_REG_a + reg - 'a'; + if ('A' <= reg && reg <= 'Z') + return VIS_REG_A + reg - 'A'; + for (size_t i = 0; i < LENGTH(vis_registers); i++) { + if (vis_registers[i].name == reg) + return i; + } + return VIS_REG_INVALID; +} + +void vis_register(Vis *vis, enum VisRegister reg) { + if (VIS_REG_A <= reg && reg <= VIS_REG_Z) { + vis->action.reg = &vis->registers[VIS_REG_a + 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; + } +} + +static Register *register_from(Vis *vis, enum VisRegister id) { + if (VIS_REG_A <= id && id <= VIS_REG_Z) + id = VIS_REG_a + id - VIS_REG_A; + if (id < LENGTH(vis->registers)) + return &vis->registers[id]; + return NULL; +} + +bool vis_register_put(Vis *vis, enum VisRegister id, const char *data, size_t len) { + Register *reg = register_from(vis, id); + if (!reg) + return false; + return register_put(vis, reg, data, len); +} + +const char *vis_register_get(Vis *vis, enum VisRegister id, size_t *len) { + return vis_register_slot_get(vis, id, 0, len); +} + +const char *vis_register_slot_get(Vis *vis, enum VisRegister id, size_t slot, size_t *len) { + Register *reg = register_from(vis, id); + if (reg) + return register_slot_get(vis, reg, slot, len); + *len = 0; + return NULL; +} + +const RegisterDef vis_registers[] = { + [VIS_REG_DEFAULT] = { '"', VIS_HELP("Unnamed register") }, + [VIS_REG_ZERO] = { '0', VIS_HELP("Yank register") }, + [VIS_REG_1] = { '1', VIS_HELP("1st sub-expression match") }, + [VIS_REG_2] = { '2', VIS_HELP("2nd sub-expression match") }, + [VIS_REG_3] = { '3', VIS_HELP("3rd sub-expression match") }, + [VIS_REG_4] = { '4', VIS_HELP("4th sub-expression match") }, + [VIS_REG_5] = { '5', VIS_HELP("5th sub-expression match") }, + [VIS_REG_6] = { '6', VIS_HELP("6th sub-expression match") }, + [VIS_REG_7] = { '7', VIS_HELP("7th sub-expression match") }, + [VIS_REG_8] = { '8', VIS_HELP("8th sub-expression match") }, + [VIS_REG_9] = { '9', VIS_HELP("9th sub-expression match") }, + [VIS_REG_AMPERSAND] = { '&', VIS_HELP("Last regex match") }, + [VIS_REG_BLACKHOLE] = { '_', VIS_HELP("/dev/null register") }, + [VIS_REG_CLIPBOARD] = { '*', VIS_HELP("System clipboard register, see vis-clipboard(1)") }, + [VIS_REG_DOT] = { '.', VIS_HELP("Last inserted text") }, + [VIS_REG_SEARCH] = { '/', VIS_HELP("Last search pattern") }, + [VIS_REG_COMMAND] = { ':', VIS_HELP("Last :-command") }, + [VIS_REG_SHELL] = { '!', VIS_HELP("Last shell command given to either <, >, |, or !") }, +}; @@ -33,27 +33,6 @@ const MarkDef vis_marks[] = { [VIS_MARK_SELECTION_END] = { '>', VIS_HELP("Last selection end") }, }; -const RegisterDef vis_registers[] = { - [VIS_REG_DEFAULT] = { '"', VIS_HELP("Unnamed register") }, - [VIS_REG_ZERO] = { '0', VIS_HELP("Yank register") }, - [VIS_REG_1] = { '1', VIS_HELP("1st sub-expression match") }, - [VIS_REG_2] = { '2', VIS_HELP("2nd sub-expression match") }, - [VIS_REG_3] = { '3', VIS_HELP("3rd sub-expression match") }, - [VIS_REG_4] = { '4', VIS_HELP("4th sub-expression match") }, - [VIS_REG_5] = { '5', VIS_HELP("5th sub-expression match") }, - [VIS_REG_6] = { '6', VIS_HELP("6th sub-expression match") }, - [VIS_REG_7] = { '7', VIS_HELP("7th sub-expression match") }, - [VIS_REG_8] = { '8', VIS_HELP("8th sub-expression match") }, - [VIS_REG_9] = { '9', VIS_HELP("9th sub-expression match") }, - [VIS_REG_AMPERSAND] = { '&', VIS_HELP("Last regex match") }, - [VIS_REG_BLACKHOLE] = { '_', VIS_HELP("/dev/null register") }, - [VIS_REG_CLIPBOARD] = { '*', VIS_HELP("System clipboard register, see vis-clipboard(1)") }, - [VIS_REG_DOT] = { '.', VIS_HELP("Last inserted text") }, - [VIS_REG_SEARCH] = { '/', VIS_HELP("Last search pattern") }, - [VIS_REG_COMMAND] = { ':', VIS_HELP("Last :-command") }, - [VIS_REG_SHELL] = { '!', VIS_HELP("Last shell command given to either <, >, |, or !") }, -}; - static void macro_replay(Vis *vis, const Macro *macro); static void macro_replay_internal(Vis *vis, const Macro *macro); static void vis_keys_push(Vis *vis, const char *input, size_t pos, bool record); @@ -1565,42 +1544,6 @@ void vis_count_set(Vis *vis, int count) { vis->action.count = (count >= 0 ? count : VIS_COUNT_UNKNOWN); } -enum VisRegister vis_register_from(Vis *vis, char reg) { - switch (reg) { - case '+': return VIS_REG_CLIPBOARD; - case '@': return VIS_MACRO_LAST_RECORDED; - } - - if ('a' <= reg && reg <= 'z') - return VIS_REG_a + reg - 'a'; - if ('A' <= reg && reg <= 'Z') - return VIS_REG_A + reg - 'A'; - for (size_t i = 0; i < LENGTH(vis_registers); i++) { - if (vis_registers[i].name == reg) - return i; - } - return VIS_REG_INVALID; -} - -void vis_register(Vis *vis, enum VisRegister reg) { - if (VIS_REG_A <= reg && reg <= VIS_REG_Z) { - vis->action.reg = &vis->registers[VIS_REG_a + 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 (VIS_REG_A <= reg && reg <= VIS_REG_Z) - reg = VIS_REG_a + reg - VIS_REG_A; - if (reg < LENGTH(vis->registers)) - return register_get(vis, &vis->registers[reg], len); - *len = 0; - return NULL; -} - void vis_exit(Vis *vis, int status) { vis->running = false; vis->exit_status = status; @@ -463,6 +463,9 @@ enum VisRegister vis_register_from(Vis*, char reg); void vis_register(Vis*, enum VisRegister); /* get register content */ const char *vis_register_get(Vis*, enum VisRegister, size_t *len); +const char *vis_register_slot_get(Vis*, enum VisRegister, size_t slot, size_t *len); +bool vis_register_put(Vis*, enum VisRegister, const char *data, size_t len); +bool vis_register_slot_put(Vis*, enum VisRegister, size_t slot, const char *data, size_t len); /* start a macro recording, fails if a recording is already on going */ bool vis_macro_record(Vis*, enum VisRegister); |
