diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2016-04-27 13:10:55 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2016-04-27 13:10:55 +0100 |
commit | fb4585bbe06df3ceec6c510f152a8014358cfd82 (patch) | |
tree | f24d1a3b5667a0ee8d5b1b6c2be679b8accc972a /window-copy.c | |
parent | 61f231a496ff404ce811ece1389af1d929a39937 (diff) | |
parent | 55fdaab365830829d725d61c1ccf2cda0503651b (diff) | |
download | rtmux-fb4585bbe06df3ceec6c510f152a8014358cfd82.tar.gz rtmux-fb4585bbe06df3ceec6c510f152a8014358cfd82.tar.bz2 rtmux-fb4585bbe06df3ceec6c510f152a8014358cfd82.zip |
Merge branch 'master' of github.com:tmux/tmux
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/window-copy.c b/window-copy.c index 5c907c3d..a97d6dbe 100644 --- a/window-copy.c +++ b/window-copy.c @@ -27,6 +27,8 @@ 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_next_paragraph(struct window_pane *); +void window_copy_previous_paragraph(struct window_pane *); void window_copy_resize(struct window_pane *, u_int, u_int); void window_copy_key(struct window_pane *, struct client *, struct session *, key_code, struct mouse_event *); @@ -404,6 +406,44 @@ window_copy_pagedown(struct window_pane *wp) } void +window_copy_previous_paragraph(struct window_pane *wp) +{ + struct window_copy_mode_data *data = wp->modedata; + u_int ox, oy; + + oy = screen_hsize(data->backing) + data->cy - data->oy; + ox = window_copy_find_length(wp, oy); + + while (oy > 0 && window_copy_find_length(wp, oy) == 0) + oy--; + + while (oy > 0 && window_copy_find_length(wp, oy) > 0) + oy--; + + window_copy_scroll_to(wp, 0, oy); +} + +void +window_copy_next_paragraph(struct window_pane *wp) +{ + struct window_copy_mode_data *data = wp->modedata; + struct screen *s = &data->screen; + u_int maxy, ox, oy; + + oy = screen_hsize(data->backing) + data->cy - data->oy; + maxy = screen_hsize(data->backing) + screen_size_y(s) - 1; + + while (oy < maxy && window_copy_find_length(wp, oy) == 0) + oy++; + + while (oy < maxy && window_copy_find_length(wp, oy) > 0) + oy++; + + ox = window_copy_find_length(wp, oy); + window_copy_scroll_to(wp, ox, oy); +} + +void window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) { struct window_copy_mode_data *data = wp->modedata; @@ -548,6 +588,14 @@ window_copy_key(struct window_pane *wp, struct client *c, struct session *sess, for (; np != 0; np--) window_copy_pagedown(wp); break; + case MODEKEYCOPY_PREVIOUSPARAGRAPH: + for (; np != 0; np--) + window_copy_previous_paragraph(wp); + break; + case MODEKEYCOPY_NEXTPARAGRAPH: + for (; np != 0; np--) + window_copy_next_paragraph(wp); + break; case MODEKEYCOPY_HALFPAGEUP: n = screen_size_y(s) / 2; for (; np != 0; np--) { |