diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-04-19 13:11:52 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-04-19 13:42:25 +0200 |
| commit | 2c8fcaa8fbb17b99aa5b0f8bfbbe0451dfa509f3 (patch) | |
| tree | 1160dd96040c19f2a6da365e29240d978c6067ca /register.h | |
| parent | a2316394d35eb548545730cbf2b57b27e733214c (diff) | |
| download | vis-2c8fcaa8fbb17b99aa5b0f8bfbbe0451dfa509f3.tar.gz vis-2c8fcaa8fbb17b99aa5b0f8bfbbe0451dfa509f3.tar.xz | |
vis: restructure register handling
Decouple register content from cursors. Previously each cursor had
exactly one corresponding register. Now each register can save a
list of values whose lifetime is not tied to the cursor.
If multiple cursors exist and a put with a register holding only
a single value is performed, then this value is inserted at every
cursor location. If there are fewer values available than cursors,
then only the matching ones will be used. If a register holding
multiple values is inserted in a single cursor context, only the
first value will be used. Another option would be to join all
existing values. The details of this behavior might be changed
in the future.
<C-r> in insert mode has not yet been adapted and register handling
in general needs to be cleaned up further.
Fix #527
Diffstat (limited to 'register.h')
| -rw-r--r-- | register.h | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -4,11 +4,11 @@ #include <stddef.h> #include <stdbool.h> #include "vis.h" -#include "buffer.h" +#include "array.h" #include "text-util.h" typedef struct { - Buffer buf; + Array values; bool linewise; /* place register content on a new line when inserting? */ bool append; enum { @@ -18,11 +18,20 @@ typedef struct { } type; } Register; +bool register_init(Register*); void register_release(Register*); + const char *register_get(Vis*, Register*, size_t *len); -bool register_put(Vis*, Register*, const char *data, 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_append_range(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 |
