aboutsummaryrefslogtreecommitdiff
path: root/window-copy.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2016-04-27 13:10:55 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2016-04-27 13:10:55 +0100
commitfb4585bbe06df3ceec6c510f152a8014358cfd82 (patch)
treef24d1a3b5667a0ee8d5b1b6c2be679b8accc972a /window-copy.c
parent61f231a496ff404ce811ece1389af1d929a39937 (diff)
parent55fdaab365830829d725d61c1ccf2cda0503651b (diff)
downloadrtmux-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.c48
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--) {