From 90184397cba235b212c0e230db0dbb6dfc8d0aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sun, 23 Apr 2017 18:16:58 +0200 Subject: vis: fix # register count Previously the # register was always reported as containing only one entry. This wrongly caused the first value to be put at all locations. Fix #544 --- vis-core.h | 2 +- vis-registers.c | 4 +++- vis.c | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/vis-core.h b/vis-core.h index 51d3ae8..c9a1ffc 100644 --- a/vis-core.h +++ b/vis-core.h @@ -284,7 +284,7 @@ bool register_slot_put(Vis*, Register*, size_t slot, const char *data, size_t le 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*); +size_t vis_register_count(Vis*, Register*); bool register_resize(Register*, size_t count); #endif diff --git a/vis-registers.c b/vis-registers.c index f5b5d7b..d5bb10d 100644 --- a/vis-registers.c +++ b/vis-registers.c @@ -175,7 +175,9 @@ bool register_put_range(Vis *vis, Register *reg, Text *txt, Filerange *range) { register_resize(reg, 1); } -size_t register_count(Register *reg) { +size_t vis_register_count(Vis *vis, Register *reg) { + if (reg->type == REGISTER_NUMBER) + return vis->win ? view_cursors_count(vis->win->view) : 0; return array_length(®->values); } diff --git a/vis.c b/vis.c index d4031b2..4a38903 100644 --- a/vis.c +++ b/vis.c @@ -821,7 +821,7 @@ void vis_do(Vis *vis) { size_t last_reg_slot = reg_slot; if (!reg) reg = &vis->registers[file->internal ? VIS_REG_PROMPT : VIS_REG_DEFAULT]; - if (a->op == &vis_operators[VIS_OP_PUT_AFTER] && multiple_cursors && register_count(reg) == 1) + if (a->op == &vis_operators[VIS_OP_PUT_AFTER] && multiple_cursors && vis_register_count(vis, reg) == 1) reg_slot = 0; for (Cursor *cursor = view_cursors(view), *next; cursor; cursor = next) { -- cgit v1.2.3