aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-04-19 20:05:19 +0200
committerMarc André Tanner <mat@brain-dump.org>2017-04-20 22:47:07 +0200
commit9f2210c8ee567c75f43d18313b668aee06eda597 (patch)
treef806ed08d5cf1cd9d3947c7f4804f46ad18fbccc
parent2c8fcaa8fbb17b99aa5b0f8bfbbe0451dfa509f3 (diff)
downloadvis-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--Makefile4
-rw-r--r--register.h37
-rw-r--r--view.h1
-rw-r--r--vis-core.h30
-rw-r--r--vis-lua.c4
-rw-r--r--vis-registers.c (renamed from register.c)79
-rw-r--r--vis.c57
-rw-r--r--vis.h3
8 files changed, 110 insertions, 105 deletions
diff --git a/Makefile b/Makefile
index 3ac5334..dd896e2 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/view.h b/view.h
index 262c581..a6d455e 100644
--- a/view.h
+++ b/view.h
@@ -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
diff --git a/vis-core.h b/vis-core.h
index b0caee1..4df0cd4 100644
--- a/vis-core.h
+++ b/vis-core.h
@@ -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
diff --git a/vis-lua.c b/vis-lua.c
index 80e3e38..ed7ac38 100644
--- a/vis-lua.c
+++ b/vis-lua.c
@@ -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(&reg->values, slot);
@@ -176,3 +172,78 @@ size_t register_count(Register *reg) {
bool register_resize(Register *reg, size_t count) {
return array_truncate(&reg->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 !") },
+};
diff --git a/vis.c b/vis.c
index a6a48da..644fe08 100644
--- a/vis.c
+++ b/vis.c
@@ -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;
diff --git a/vis.h b/vis.h
index c612a36..ea02307 100644
--- a/vis.h
+++ b/vis.h
@@ -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);