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.
pull/348/head
nicm 2016-03-18 07:28:27 +00:00
parent 0d6de44a37
commit fa97b0a95b
5 changed files with 23 additions and 17 deletions

View File

@ -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),
};

View File

@ -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 }
};

View File

@ -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;

8
tmux.1
View File

@ -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

3
tmux.h
View File

@ -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),