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

Reply via email to