aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-09-13 22:05:13 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-09-13 22:05:13 +0200
commitc94579526c082e75b9ee8ec2fc189540884ac039 (patch)
tree9a66fad84e74d140727f055b2421e218daae98ff /window.c
parentda264da19a0f8fccffad699f40be35fd2b82822f (diff)
downloadvis-c94579526c082e75b9ee8ec2fc189540884ac039.tar.gz
vis-c94579526c082e75b9ee8ec2fc189540884ac039.tar.xz
Make window_selection_get to return the correct range
This makes the operator operate on the correct file range if executed from visual mode. The problem is that if the cursor is visible the selection seems larger than it actually is. The cell under the cursor is actually not part of the selection eventhough it is visually indistinguishable from it. The somewhat hacky way around this is to hide the cursor once selection is active and show it again once the selection is cleared. This will probably cause a headache if the cursor needs to be visible while a selection is active like for example in the command prompt.
Diffstat (limited to 'window.c')
-rw-r--r--window.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/window.c b/window.c
index 166d257..dc1cb6d 100644
--- a/window.c
+++ b/window.c
@@ -87,6 +87,7 @@ void window_selection_clear(Win *win) {
win->sel.start = win->sel.end = (size_t)-1;
window_draw(win);
window_cursor_update(win);
+ curs_set(1);
}
/* reset internal window data structures (cell matrix, line offsets etc.) */
@@ -121,6 +122,7 @@ Filerange window_selection_get(Win *win) {
sel.start = sel.end;
sel.end = tmp;
}
+ sel.end = text_char_next(win->text, sel.end);
return sel;
}
@@ -730,7 +732,9 @@ void window_scroll_to(Win *win, size_t pos) {
}
void window_selection_start(Win *win) {
- win->sel.start = window_cursor_get(win);
+ win->sel.start = win->sel.end = window_cursor_get(win);
+ window_draw(win);
+ curs_set(0);
}
void window_selection_end(Win *win) {