diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-11-16 11:16:16 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-11-16 11:16:16 +0000 |
commit | 70e40e853d15566f8c82d1792eb4935af16cdd54 (patch) | |
tree | 65a72a3e923dd8acebdf4dac013cda18183ca92b /usr.bin | |
parent | 1ee3729533d5c7e39fe1d8b6318d36ed5c07eeb0 (diff) |
Add -and-cancel variants for scrolling commands to exit copy mode when
the bottom is reached, from Stephen Hicks.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/tmux/tmux.1 | 16 | ||||
-rw-r--r-- | usr.bin/tmux/window-copy.c | 37 |
2 files changed, 38 insertions, 15 deletions
diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 78b7458441c..a131375d568 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.588 2017/11/15 19:59:27 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.589 2017/11/16 11:16:15 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: November 15 2017 $ +.Dd $Mdocdate: November 16 2017 $ .Dt TMUX 1 .Os .Sh NAME @@ -1122,9 +1122,10 @@ The following commands are supported in copy mode: .It Li "end-of-line" Ta "$" Ta "C-e" .It Li "goto-line <line>" Ta ":" Ta "g" .It Li "halfpage-down" Ta "C-d" Ta "M-Down" +.It Li "halfpage-down-and-cancel" Ta "" Ta "" .It Li "halfpage-up" Ta "C-u" Ta "M-Up" -.It Li "history-bottom" Ta "G" Ta "M-<" -.It Li "history-top" Ta "g" Ta "M->" +.It Li "history-bottom" Ta "G" Ta "M->" +.It Li "history-top" Ta "g" Ta "M-<" .It Li "jump-again" Ta ";" Ta ";" .It Li "jump-backward <to>" Ta "F" Ta "F" .It Li "jump-forward <to>" Ta "f" Ta "f" @@ -1139,12 +1140,14 @@ The following commands are supported in copy mode: .It Li "next-word-end" Ta "e" Ta "M-f" .It Li "other-end" Ta "o" Ta "" .It Li "page-down" Ta "C-f" Ta "PageDown" +.It Li "page-down-and-cancel" Ta "" Ta "" .It Li "page-up" Ta "C-b" Ta "PageUp" .It Li "previous-paragraph" Ta "{" Ta "M-{" .It Li "previous-space" Ta "B" Ta "" .It Li "previous-word" Ta "b" Ta "M-b" .It Li "rectangle-toggle" Ta "v" Ta "R" .It Li "scroll-down" Ta "C-e" Ta "C-Down" +.It Li "scroll-down-and-cancel" Ta "" Ta "" .It Li "scroll-up" Ta "C-y" Ta "C-Up" .It Li "search-again" Ta "n" Ta "n" .It Li "search-backward <for>" Ta "?" Ta "" @@ -1158,6 +1161,11 @@ The following commands are supported in copy mode: .It Li "top-line" Ta "H" Ta "M-R" .El .Pp +The +.Ql -and-cancel +variants of some commands exit copy mode after they have completed (for copy +commands) or when the cursor reaches the bottom (for scrolling commands). +.Pp The next and previous word keys use space and the .Ql - , .Ql _ diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c index 8f1379b2e60..08ef4c49af8 100644 --- a/usr.bin/tmux/window-copy.c +++ b/usr.bin/tmux/window-copy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-copy.c,v 1.185 2017/11/13 11:49:11 nicm Exp $ */ +/* $OpenBSD: window-copy.c,v 1.186 2017/11/16 11:16:15 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -30,7 +30,7 @@ static void window_copy_command(struct window_pane *, struct client *, static struct screen *window_copy_init(struct window_pane *, struct cmd_find_state *, struct args *); static void window_copy_free(struct window_pane *); -static int window_copy_pagedown(struct window_pane *, int); +static int window_copy_pagedown(struct window_pane *, int, int); static void window_copy_next_paragraph(struct window_pane *); static void window_copy_previous_paragraph(struct window_pane *); static void window_copy_resize(struct window_pane *, u_int, u_int); @@ -392,7 +392,7 @@ window_copy_pageup(struct window_pane *wp, int half_page) } static int -window_copy_pagedown(struct window_pane *wp, int half_page) +window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; @@ -431,7 +431,7 @@ window_copy_pagedown(struct window_pane *wp, int half_page) window_copy_cursor_end_of_line(wp); } - if (data->scroll_exit && data->oy == 0) + if (scroll_exit && data->oy == 0) return (1); window_copy_update_selection(wp, 1); window_copy_redraw_screen(wp); @@ -524,7 +524,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, struct screen *sn = &data->screen; const char *command, *argument, *ws; u_int np = wp->modeprefix; - int cancel = 0, redraw = 0; + int cancel = 0, redraw = 0, scroll_exit; char prefix; if (args->argc == 0) @@ -629,9 +629,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "end-of-line") == 0) window_copy_cursor_end_of_line(wp); - if (strcmp(command, "halfpage-down") == 0) { + if (strcmp(command, "halfpage-down") == 0 || + strcmp(command, "halfpage-down-and-cancel") == 0) { + if (strcmp(command, "halfpage-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 1)) { + if (window_copy_pagedown(wp, 1, scroll_exit)) { cancel = 1; break; } @@ -727,9 +732,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if ((np % 2) != 0) window_copy_other_end(wp); } - if (strcmp(command, "page-down") == 0) { + if (strcmp(command, "page-down") == 0 || + strcmp(command, "page-down-and-cancel") == 0) { + if (strcmp(command, "page-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 0)) { + if (window_copy_pagedown(wp, 0, scroll_exit)) { cancel = 1; break; } @@ -756,10 +766,15 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, sn->sel.lineflag = LINE_SEL_NONE; window_copy_rectangle_toggle(wp); } - if (strcmp(command, "scroll-down") == 0) { + if (strcmp(command, "scroll-down") == 0 || + strcmp(command, "scroll-down-and-cancel") == 0) { + if (strcmp(command, "scroll-down-and-cancel") == 0) + scroll_exit = 1; + else + scroll_exit = data->scroll_exit; for (; np != 0; np--) window_copy_cursor_down(wp, 1); - if (data->scroll_exit && data->oy == 0) + if (scroll_exit && data->oy == 0) cancel = 1; } if (strcmp(command, "scroll-up") == 0) { |