aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd-copy-mode.c2
-rw-r--r--tmux.h2
-rw-r--r--window-copy.c54
3 files changed, 24 insertions, 34 deletions
diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c
index beb4d7c8..d785e893 100644
--- a/cmd-copy-mode.c
+++ b/cmd-copy-mode.c
@@ -83,7 +83,7 @@ cmd_copy_mode_exec(struct cmd *self, struct cmd_q *cmdq)
window_copy_start_drag(c, &cmdq->item->mouse);
}
if (wp->mode == &window_copy_mode && args_has(self->args, 'u'))
- window_copy_pageup(wp);
+ window_copy_pageup(wp, 0);
return (CMD_RETURN_NORMAL);
}
diff --git a/tmux.h b/tmux.h
index f73a674e..314f4c9c 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2219,7 +2219,7 @@ void window_copy_init_from_pane(struct window_pane *, int);
void window_copy_init_for_output(struct window_pane *);
void printflike(2, 3) window_copy_add(struct window_pane *, const char *, ...);
void window_copy_vadd(struct window_pane *, const char *, va_list);
-void window_copy_pageup(struct window_pane *);
+void window_copy_pageup(struct window_pane *, int);
void window_copy_start_drag(struct client *, struct mouse_event *);
int window_copy_scroll_position(struct window_pane *);
diff --git a/window-copy.c b/window-copy.c
index a97d6dbe..c8d2ee1a 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -26,7 +26,7 @@
struct screen *window_copy_init(struct window_pane *);
void window_copy_free(struct window_pane *);
-void window_copy_pagedown(struct window_pane *);
+void window_copy_pagedown(struct window_pane *, int);
void window_copy_next_paragraph(struct window_pane *);
void window_copy_previous_paragraph(struct window_pane *);
void window_copy_resize(struct window_pane *, u_int, u_int);
@@ -323,7 +323,7 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap)
}
void
-window_copy_pageup(struct window_pane *wp)
+window_copy_pageup(struct window_pane *wp, int half_page)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
@@ -342,8 +342,12 @@ window_copy_pageup(struct window_pane *wp)
data->cx = data->lastcx;
n = 1;
- if (screen_size_y(s) > 2)
- n = screen_size_y(s) - 2;
+ if (screen_size_y(s) > 2) {
+ if (half_page)
+ n = screen_size_y(s) / 2;
+ else
+ n = screen_size_y(s) - 2;
+ }
if (data->oy + n > screen_hsize(data->backing))
data->oy = screen_hsize(data->backing);
@@ -362,7 +366,7 @@ window_copy_pageup(struct window_pane *wp)
}
void
-window_copy_pagedown(struct window_pane *wp)
+window_copy_pagedown(struct window_pane *wp, int half_page)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
@@ -381,8 +385,12 @@ window_copy_pagedown(struct window_pane *wp)
data->cx = data->lastcx;
n = 1;
- if (screen_size_y(s) > 2)
- n = screen_size_y(s) - 2;
+ if (screen_size_y(s) > 2) {
+ if (half_page)
+ n = screen_size_y(s) / 2;
+ else
+ n = screen_size_y(s) - 2;
+ }
if (data->oy < n)
data->oy = 0;
@@ -477,7 +485,7 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
const char *word_separators;
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
- u_int n, np;
+ u_int np;
int keys;
enum mode_key_cmd cmd;
const char *arg, *ss;
@@ -582,11 +590,11 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
break;
case MODEKEYCOPY_PREVIOUSPAGE:
for (; np != 0; np--)
- window_copy_pageup(wp);
+ window_copy_pageup(wp, 0);
break;
case MODEKEYCOPY_NEXTPAGE:
for (; np != 0; np--)
- window_copy_pagedown(wp);
+ window_copy_pagedown(wp, 0);
break;
case MODEKEYCOPY_PREVIOUSPARAGRAPH:
for (; np != 0; np--)
@@ -597,30 +605,12 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess,
window_copy_next_paragraph(wp);
break;
case MODEKEYCOPY_HALFPAGEUP:
- n = screen_size_y(s) / 2;
- for (; np != 0; np--) {
- if (data->oy + n > screen_hsize(data->backing))
- data->oy = screen_hsize(data->backing);
- else
- data->oy += n;
- }
- window_copy_update_selection(wp, 1);
- window_copy_redraw_screen(wp);
+ for (; np != 0; np--)
+ window_copy_pageup(wp, 1);
break;
case MODEKEYCOPY_HALFPAGEDOWN:
- n = screen_size_y(s) / 2;
- for (; np != 0; np--) {
- if (data->oy < n)
- data->oy = 0;
- else
- data->oy -= n;
- }
- if (data->scroll_exit && data->oy == 0) {
- window_pane_reset_mode(wp);
- return;
- }
- window_copy_update_selection(wp, 1);
- window_copy_redraw_screen(wp);
+ for (; np != 0; np--)
+ window_copy_pagedown(wp, 1);
break;
case MODEKEYCOPY_TOPLINE:
data->cx = 0;