summaryrefslogtreecommitdiffstats
path: root/window-copy.c
diff options
context:
space:
mode:
authornicm <nicm>2022-08-23 08:14:19 +0000
committernicm <nicm>2022-08-23 08:14:19 +0000
commit416c27c9958e928b9ff845c1701acf5b10d0db8d (patch)
tree735413f17d4db0e675b1d0a2ddf1eb96b9c05a8e /window-copy.c
parent7c2dcd72380dc2d9e119e99cb423a67ae17b6bd2 (diff)
Add scroll-middle copy mode command to make cursor line in the middle,
from Varun Kumar E in GitHub issue 3307.
Diffstat (limited to 'window-copy.c')
-rw-r--r--window-copy.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/window-copy.c b/window-copy.c
index 834a2d99..743364d6 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1251,6 +1251,32 @@ window_copy_cmd_cursor_right(struct window_copy_cmd_state *cs)
}
static enum window_copy_cmd_action
+window_copy_cmd_scroll_middle(struct window_copy_cmd_state *cs)
+{
+ struct window_mode_entry *wme = cs->wme;
+ struct window_copy_mode_data *data = wme->data;
+ u_int mid_value, oy, delta;
+ int scroll_up; /* >0 up, <0 down */
+
+ mid_value = (screen_size_y(&data->screen) - 1) / 2;
+ scroll_up = data->cy - mid_value;
+ delta = abs(scroll_up);
+ oy = screen_hsize(data->backing) + data->cy - data->oy;
+
+ log_debug ("XXX %u %u %u %d %u", mid_value, oy, delta, scroll_up, data->oy);
+ if (scroll_up > 0 && data->oy >= delta) {
+ window_copy_scroll_up(wme, delta);
+ data->cy -= delta;
+ } else if (scroll_up < 0 && oy >= delta) {
+ window_copy_scroll_down(wme, delta);
+ data->cy += delta;
+ }
+
+ window_copy_update_selection(wme, 0, 0);
+ return (WINDOW_COPY_CMD_REDRAW);
+}
+
+static enum window_copy_cmd_action
window_copy_cmd_cursor_up(struct window_copy_cmd_state *cs)
{
struct window_mode_entry *wme = cs->wme;
@@ -2780,6 +2806,12 @@ static const struct {
.clear = WINDOW_COPY_CMD_CLEAR_ALWAYS,
.f = window_copy_cmd_scroll_down_and_cancel
},
+ { .command = "scroll-middle",
+ .minargs = 0,
+ .maxargs = 0,
+ .clear = WINDOW_COPY_CMD_CLEAR_ALWAYS,
+ .f = window_copy_cmd_scroll_middle
+ },
{ .command = "scroll-up",
.minargs = 0,
.maxargs = 0,