diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-06-14 22:54:06 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-06-15 15:51:43 +0200 |
| commit | f000d2f9c924bb964203d7dba27b3290045c6853 (patch) | |
| tree | 38dfb204c458979ff298cc466ec6c64f69173798 /vis-registers.c | |
| parent | 4b2513c5e1587319ec14ec511a01cfbad331ac79 (diff) | |
vis: add basic infrastructure to store selections in registers
Diffstat (limited to 'vis-registers.c')
| -rw-r--r-- | vis-registers.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/vis-registers.c b/vis-registers.c index aae7fdc..3e69b13 100644 --- a/vis-registers.c +++ b/vis-registers.c @@ -29,6 +29,7 @@ static ssize_t read_buffer(void *context, char *data, size_t len) { bool register_init(Register *reg) { Buffer buf; buffer_init(&buf); + array_init_sized(®->selections, sizeof(SelectionRegion)); array_init_sized(®->values, sizeof(Buffer)); return array_add(®->values, &buf); } @@ -36,6 +37,7 @@ bool register_init(Register *reg) { void register_release(Register *reg) { if (!reg) return; + array_release(®->selections); size_t n = array_capacity(®->values); for (size_t i = 0; i < n; i++) buffer_release(array_get(®->values, i)); @@ -239,6 +241,39 @@ const char *vis_register_slot_get(Vis *vis, enum VisRegister id, size_t slot, si return NULL; } +Array vis_register_selections_get(Vis *vis, enum VisRegister id) { + Array sel; + array_init_sized(&sel, sizeof(Filerange)); + Register *reg = register_from(vis, id); + if (!reg) + return sel; + View *view = vis->win->view; + size_t len = array_length(®->selections); + array_reserve(&sel, len); + for (size_t i = 0; i < len; i++) { + SelectionRegion *sr = array_get(®->selections, i); + Filerange r = view_regions_restore(view, sr); + if (text_range_valid(&r)) + array_add(&sel, &r); + } + //selections_normalize(&sel); + return sel; +} + +void vis_register_selections_set(Vis *vis, enum VisRegister id, Array *sel) { + Register *reg = register_from(vis, id); + if (!reg) + return; + array_clear(®->selections); + View *view = vis->win->view; + for (size_t i = 0, len = array_length(sel); i < len; i++) { + SelectionRegion ss; + Filerange *r = array_get(sel, i); + if (view_regions_save(view, r, &ss)) + array_add(®->selections, &ss); + } +} + const RegisterDef vis_registers[] = { [VIS_REG_DEFAULT] = { '"', VIS_HELP("Unnamed register") }, [VIS_REG_ZERO] = { '0', VIS_HELP("Yank register") }, |
