aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-08-13 22:11:43 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-08-13 22:11:43 +0000
commit39154402e5907887c7c49095d60577932afd99ee (patch)
tree0725846643bbba3266282ada995e603151e1e817
parent375be90fd1cd137f84496c8919f3cceff839b33b (diff)
downloadrtmux-39154402e5907887c7c49095d60577932afd99ee.tar.gz
rtmux-39154402e5907887c7c49095d60577932afd99ee.tar.bz2
rtmux-39154402e5907887c7c49095d60577932afd99ee.zip
Scroll by two less than the number of lines in the screen, like emacs, rather
than by the entire screen, to make it easier to pull things out from under the line indicator. Suggested by claudio.
-rw-r--r--window-copy.c16
-rw-r--r--window-scroll.c16
2 files changed, 24 insertions, 8 deletions
diff --git a/window-copy.c b/window-copy.c
index be810ee3..f99c969b 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -130,11 +130,15 @@ window_copy_pageup(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
+ u_int n;
- if (data->oy + screen_size_y(s) > screen_hsize(&wp->base))
+ n = 1;
+ if (screen_size_y(s) > 2)
+ n = screen_size_y(s) - 2;
+ if (data->oy + n > screen_hsize(&wp->base))
data->oy = screen_hsize(&wp->base);
else
- data->oy += screen_size_y(s);
+ data->oy += n;
window_copy_update_selection(wp);
window_copy_redraw_screen(wp);
}
@@ -167,6 +171,7 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
+ u_int n;
switch (mode_key_lookup(&data->mdata, key)) {
case MODEKEYCOPY_CANCEL:
@@ -188,10 +193,13 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
window_copy_pageup(wp);
break;
case MODEKEYCOPY_NEXTPAGE:
- if (data->oy < screen_size_y(s))
+ n = 1;
+ if (screen_size_y(s) > 2)
+ n = screen_size_y(s) - 2;
+ if (data->oy < n)
data->oy = 0;
else
- data->oy -= screen_size_y(s);
+ data->oy -= n;
window_copy_update_selection(wp);
window_copy_redraw_screen(wp);
break;
diff --git a/window-scroll.c b/window-scroll.c
index bdb7d559..b3c0941d 100644
--- a/window-scroll.c
+++ b/window-scroll.c
@@ -101,11 +101,15 @@ window_scroll_pageup(struct window_pane *wp)
{
struct window_scroll_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
+ u_int n;
- if (data->oy + screen_size_y(s) > screen_hsize(&wp->base))
+ n = 1;
+ if (screen_size_y(s) > 2)
+ n = screen_size_y(s) - 2;
+ if (data->oy + n > screen_hsize(&wp->base))
data->oy = screen_hsize(&wp->base);
else
- data->oy += screen_size_y(s);
+ data->oy += n;
window_scroll_redraw_screen(wp);
}
@@ -130,6 +134,7 @@ window_scroll_key(struct window_pane *wp, unused struct client *c, int key)
{
struct window_scroll_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
+ u_int n;
switch (mode_key_lookup(&data->mdata, key)) {
case MODEKEYCOPY_CANCEL:
@@ -151,10 +156,13 @@ window_scroll_key(struct window_pane *wp, unused struct client *c, int key)
window_scroll_pageup(wp);
break;
case MODEKEYCOPY_NEXTPAGE:
- if (data->oy < screen_size_y(s))
+ n = 1;
+ if (screen_size_y(s) > 2)
+ n = screen_size_y(s) - 2;
+ if (data->oy < n)
data->oy = 0;
else
- data->oy -= screen_size_y(s);
+ data->oy -= n;
window_scroll_redraw_screen(wp);
break;
default: