Sorry for the delay. I've redone the patch to instead provide the -and-cancel versions of the three relevant commands (cursor-down-and-cancel doesn't seem to make sense, in my opinion, nor does it currently respect the copy-mode -e flag).
On Mon, Oct 30, 2017 at 12:51 AM, Nicholas Marriott < [email protected]> wrote: > OK well we can just leave -e for the moment and have the new commands as > well assuming the new diff is pretty small. > > > > On Mon, Oct 30, 2017 at 03:50:15PM +1100, Cam Hutchison wrote: > > Yes, I have Prefix-[ and Prefix-^[ set to copy-mode, and > > MouseDrag1Pane, WheelUpPane and "-T root PPage" using copy-mode -e. > > > > On 29 October 2017 at 19:34, Nicholas Marriott > > <[email protected]> wrote: > > > Have you got some key bindings that do copy-mode -e and some that just > > > do plain copy-mode? > > > > > > > > > > > > On Sun, Oct 29, 2017 at 01:17:37PM +1100, Cam Hutchison wrote: > > >> Stephen, > > >> > > >> Sorry for the delay in responding - life got in the way... > > >> > > >> Stephen Hicks wrote: > > >> > In my mind, those two models are not mutually exclusive. When I > use the > > >> > mouse wheel to initiate a scrollback, I do tend to be in the second > model, > > >> > but on the keyboard, how I enter copy mode is more related to > whether the > > >> > thing I'm looking for is on the screen or not, in addition to > whether I'm > > >> > searching, scrolling, or copying. > > >> > > >> No, not mutually exclusive but when nicm said to also remove the -e > > >> option, I didn't see how your proposed changes would allow me to > retain > > >> the mode I ues. > > >> > > >> > My setting looks roughly like this: > > >> > > > >> > bind [ copy-mode > > >> > bind -n S-PgUp copy-mode -u > > >> > bind -T copy-mode PgUp send-keys -X page-up > > >> > bind -T copy-mode S-PgUp send-keys -X page-up > > >> > bind -T copy-mode PgDn send-keys -X page-down > > >> > bind -T copy-mode S-PgDn send-keys -X page-down-maybe-cancel > > >> > > >> I wonder if a simpler way would be to define two new copy mode > commands, > > >> autoexit-on and autoexit-off. It's not quite ideal as two commands, as > > >> it smells more like an option but there are no pane options or copy > mode > > >> options. > > >> > > >> With these two commands, you could replace 'copy-mode -e' with > > >> 'copy-mode; send-keys -X autoexit-on' and you could replace your > > >> bindings with a similar sequence that sends autoexit-off then > page-down, > > >> or autoexit-on then page-down, etc. > > >> > > >> That is, give control of the basic components needed to compose the > > >> higher-level behaviour. > > >> > > >> I'd be happy with getting rid of copy-mode -e with something like this > > >> > > >> If I seem a little defensive of copy-mode -e its because I added it > :-) > > >> > > >> Cheers, > > >> Cam > > >> > > >> > On Wed, Oct 25, 2017 at 7:37 PM, Cam Hutchison <[email protected]> wrote: > > >> > > > >> > > On 26 October 2017 at 05:39, Stephen Hicks < > [email protected]> wrote: > > >> > > > I appreciate the patch that went in a while back to add > "copy-mode -e", > > >> > > > allowing to automatically exit copy-mode when reaching the > bottom of the > > >> > > > buffer. But I find that this functionality is a bit of "spooky > action > > >> > > at a > > >> > > > distance": the decision to exit depends not on the input the > caused the > > >> > > > scroll-down, but instead of the input that initially scrolled > up. > > >> > > > > >> > > I'm not sure I understand your use case or your issue with the > current > > >> > > behaviour. Is it just the "spooky action at a distance" that you > object to? > > >> > > > > >> > > The current behaviour is intended to model two different ways > that copy > > >> > > mode can be used: > > >> > > > > >> > > 1) The normal mode where you are copying data out of the > scrollback > > >> > > buffer, searching through it, or some other explicit action. This > mode > > >> > > requires you to take an equally explicit action to exit. > > >> > > > > >> > > 2) Scrollback mode, where you are just scrolling back through the > > >> > > terminal history. In this mode, you enter typically with just a > PageUp > > >> > > or ScrollUp event, not a binding that is explicitly copy-mode. > This > > >> > > way, exiting mirrors your entry - when you scroll back to where > you > > >> > > started, you're no longer in copy mode. > > >> > > > > >> > > I don't understand the "spooky action at a distance" (I get that > how you > > >> > > enter the mode defines how you can exit the mode, but that's all > related > > >> > > and not spooky unrelated stuff, or at a distance). > > >> > > > > >> > > I can't see how your approach allows the distinction between > these two > > >> > > use cases to be retained. Perhaps using separate key tables, but > that > > >> > > feels like a lot of extra configuration. > > >> > > > > >> > > Can you explain why you want to change this? > > >> > > > > >> > > > > > >> > > > I've put together a small patch to allow opting into the > auto-exit > > >> > > behavior > > >> > > > on scroll-down commands instead. Currently I've overloaded the > > >> > > send-keys -R > > >> > > > argument (which seems somewhat appropriate given that exiting > copy-mode > > >> > > is a > > >> > > > sort of "reset"), but I'd also be happy to find a different way > to pass > > >> > > the > > >> > > > option (either adding an additional argument to send-keys, or > adding > > >> > > > scroll-down, etc, to the 1-arg branch so that you'd write > "send-keys -X > > >> > > > scroll-down -e", though in that case I'm not sure what to do if > the > > >> > > argument > > >> > > > is anything *other* than -e - currently it silently does > nothing if a > > >> > > > command has the wrong (number of) arguments, which isn't great. > > >> > > > > > >> > > > Please let me know how to proceed so that this functionality > can be > > >> > > added. > > >> > > > Or if you'd rather continue on a GitHub pull request, that > would be > > >> > > great as > > >> > > > well. > > >> > > > > > >> > > > Thanks! > > >> > > > steve > > >> > > > > > >> > > > -- > > >> > > > You received this message because you are subscribed to the > Google Groups > > >> > > > "tmux-users" group. > > >> > > > To unsubscribe from this group and stop receiving emails from > it, send an > > >> > > > email to [email protected]. > > >> > > > To post to this group, send email to > [email protected]. > > >> > > > For more options, visit https://groups.google.com/d/optout. > > >> > > > > >> > > >> -- > > >> You received this message because you are subscribed to the Google > Groups "tmux-users" group. > > >> To unsubscribe from this group and stop receiving emails from it, > send an email to [email protected]. > > >> To post to this group, send an email to [email protected]. > > >> For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "tmux-users" group. > > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > > > To post to this group, send an email to [email protected]. > > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "tmux-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
From aafaef041ce806989dea325b9a5e4f348407b856 Mon Sep 17 00:00:00 2001 From: Stephen Hicks <[email protected]> Date: Wed, 25 Oct 2017 11:29:09 -0700 Subject: [PATCH] Allow scroll/page-down commands to optionally cancel copy-mode. To: [email protected] Adds page-down-and-cancel, scroll-down-and-cancel, and half-page-down-and-cancel. --- window-copy.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/window-copy.c b/window-copy.c index 09ccc26c..31f4b7b9 100644 --- a/window-copy.c +++ b/window-copy.c @@ -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); @@ -631,7 +631,16 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, window_copy_cursor_end_of_line(wp); if (strcmp(command, "halfpage-down") == 0) { for (; np != 0; np--) { - if (window_copy_pagedown(wp, 1)) { + if (window_copy_pagedown(wp, 1, + data->scroll_exit)) { + cancel = 1; + break; + } + } + } + if (strcmp(command, "halfpage-down-and-cancel") == 0) { + for (; np != 0; np--) { + if (window_copy_pagedown(wp, 1, 1)) { cancel = 1; break; } @@ -729,7 +738,16 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "page-down") == 0) { for (; np != 0; np--) { - if (window_copy_pagedown(wp, 0)) { + if (window_copy_pagedown(wp, 0, + data->scroll_exit)) { + cancel = 1; + break; + } + } + } + if (strcmp(command, "page-down-and-cancel") == 0) { + for (; np != 0; np--) { + if (window_copy_pagedown(wp, 0, 1)) { cancel = 1; break; } @@ -759,7 +777,13 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (strcmp(command, "scroll-down") == 0) { for (; np != 0; np--) window_copy_cursor_down(wp, 1); - if (data->scroll_exit && data->oy == 0) + if ((data->scroll_exit) && data->oy == 0) + cancel = 1; + } + if (strcmp(command, "scroll-down-and-cancel") == 0) { + for (; np != 0; np--) + window_copy_cursor_down(wp, 1); + if (data->oy == 0) cancel = 1; } if (strcmp(command, "scroll-up") == 0) { -- 2.15.0.448.gf294e3d99a-goog
