From fa97b0a95b804fec86b03d35d16c270d2866ebd6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 18 Mar 2016 07:28:27 +0000 Subject: [PATCH] Instead of reusing MouseUp at the finish of a drag, add a new key MouseDragEnd. It can be useful to bind them separately in copy mode. --- key-string.c | 3 +++ mode-key.c | 4 ++-- server-client.c | 22 +++++++++++----------- tmux.1 | 8 ++++---- tmux.h | 3 +++ 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/key-string.c b/key-string.c index c56681f1..119035a0 100644 --- a/key-string.c +++ b/key-string.c @@ -93,6 +93,9 @@ const struct { KEYC_MOUSE_STRING(MOUSEDRAG1, MouseDrag1), KEYC_MOUSE_STRING(MOUSEDRAG2, MouseDrag2), KEYC_MOUSE_STRING(MOUSEDRAG3, MouseDrag3), + KEYC_MOUSE_STRING(MOUSEDRAGEND1, MouseDragEnd1), + KEYC_MOUSE_STRING(MOUSEDRAGEND2, MouseDragEnd2), + KEYC_MOUSE_STRING(MOUSEDRAGEND3, MouseDragEnd3), KEYC_MOUSE_STRING(WHEELUP, WheelUp), KEYC_MOUSE_STRING(WHEELDOWN, WheelDown), }; diff --git a/mode-key.c b/mode-key.c index a9b15bb9..aed161bb 100644 --- a/mode-key.c +++ b/mode-key.c @@ -347,7 +347,7 @@ const struct mode_key_entry mode_key_vi_copy[] = { { KEYC_WHEELUP_PANE, 0, MODEKEYCOPY_SCROLLUP }, { KEYC_WHEELDOWN_PANE, 0, MODEKEYCOPY_SCROLLDOWN }, { KEYC_MOUSEDRAG1_PANE, 0, MODEKEYCOPY_STARTSELECTION }, - { KEYC_MOUSEUP1_PANE, 0, MODEKEYCOPY_COPYSELECTION }, + { KEYC_MOUSEDRAGEND1_PANE, 0, MODEKEYCOPY_COPYSELECTION }, { 0, -1, 0 } }; @@ -496,7 +496,7 @@ const struct mode_key_entry mode_key_emacs_copy[] = { { KEYC_WHEELUP_PANE, 0, MODEKEYCOPY_SCROLLUP }, { KEYC_WHEELDOWN_PANE, 0, MODEKEYCOPY_SCROLLDOWN }, { KEYC_MOUSEDRAG1_PANE, 0, MODEKEYCOPY_STARTSELECTION }, - { KEYC_MOUSEUP1_PANE, 0, MODEKEYCOPY_COPYSELECTION }, + { KEYC_MOUSEDRAGEND1_PANE, 0, MODEKEYCOPY_COPYSELECTION }, { 0, -1, 0 } }; diff --git a/server-client.c b/server-client.c index 9111eb82..6166eac4 100644 --- a/server-client.c +++ b/server-client.c @@ -385,33 +385,33 @@ server_client_check_mouse(struct client *c) c->tty.mouse_drag_release = NULL; /* - * End a mouse drag by passing a MouseUp key corresponding to - * the button that started the drag. + * End a mouse drag by passing a MouseDragEnd key corresponding + * to the button that started the drag. */ switch (c->tty.mouse_drag_flag) { case 1: if (where == PANE) - key = KEYC_MOUSEUP1_PANE; + key = KEYC_MOUSEDRAGEND1_PANE; if (where == STATUS) - key = KEYC_MOUSEUP1_STATUS; + key = KEYC_MOUSEDRAGEND1_STATUS; if (where == BORDER) - key = KEYC_MOUSEUP1_BORDER; + key = KEYC_MOUSEDRAGEND1_BORDER; break; case 2: if (where == PANE) - key = KEYC_MOUSEUP2_PANE; + key = KEYC_MOUSEDRAGEND2_PANE; if (where == STATUS) - key = KEYC_MOUSEUP2_STATUS; + key = KEYC_MOUSEDRAGEND2_STATUS; if (where == BORDER) - key = KEYC_MOUSEUP2_BORDER; + key = KEYC_MOUSEDRAGEND2_BORDER; break; case 3: if (where == PANE) - key = KEYC_MOUSEUP3_PANE; + key = KEYC_MOUSEDRAGEND3_PANE; if (where == STATUS) - key = KEYC_MOUSEUP3_STATUS; + key = KEYC_MOUSEDRAGEND3_STATUS; if (where == BORDER) - key = KEYC_MOUSEUP3_BORDER; + key = KEYC_MOUSEDRAGEND3_BORDER; break; default: key = KEYC_MOUSE; diff --git a/tmux.1 b/tmux.1 index 448673f1..a304e76b 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3294,10 +3294,10 @@ for a pane border or for the status line). The following mouse events are available: .Bl -column "MouseDown1" "MouseDrag1" "WheelDown" -offset indent -.It Li "MouseDown1" Ta "MouseUp1" Ta "MouseDrag1" -.It Li "MouseDown2" Ta "MouseUp2" Ta "MouseDrag2" -.It Li "MouseDown3" Ta "MouseUp3" Ta "MouseDrag3" -.It Li "WheelUp" Ta "WheelDown" Ta "" +.It Li "MouseDown1" Ta "MouseUp1" Ta "MouseDrag1" Ta "MouseDragEnd1" +.It Li "MouseDown2" Ta "MouseUp2" Ta "MouseDrag2" Ta "MouseDragEnd2" +.It Li "MouseDown3" Ta "MouseUp3" Ta "MouseDrag3" Ta "MouseDragEnd3" +.It Li "WheelUp" Ta "WheelDown" Ta "" Ta "" .El .Pp Each should be suffixed with a location, for example diff --git a/tmux.h b/tmux.h index ac94d780..b2445fce 100644 --- a/tmux.h +++ b/tmux.h @@ -135,6 +135,9 @@ enum { KEYC_MOUSE_KEY(MOUSEDRAG1), KEYC_MOUSE_KEY(MOUSEDRAG2), KEYC_MOUSE_KEY(MOUSEDRAG3), + KEYC_MOUSE_KEY(MOUSEDRAGEND1), + KEYC_MOUSE_KEY(MOUSEDRAGEND2), + KEYC_MOUSE_KEY(MOUSEDRAGEND3), KEYC_MOUSE_KEY(WHEELUP), KEYC_MOUSE_KEY(WHEELDOWN),