Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2024-11-12 12:01:10 +00:00
commit 563ed05353
7 changed files with 677 additions and 96 deletions

View File

@ -30,8 +30,8 @@ const struct cmd_entry cmd_copy_mode_entry = {
.name = "copy-mode", .name = "copy-mode",
.alias = NULL, .alias = NULL,
.args = { "deHMs:t:uq", 0, 0, NULL }, .args = { "deHMqSs:t:u", 0, 0, NULL },
.usage = "[-deHMuq] [-s src-pane] " CMD_TARGET_PANE_USAGE, .usage = "[-deHMqSu] [-s src-pane] " CMD_TARGET_PANE_USAGE,
.source = { 's', CMD_FIND_PANE, 0 }, .source = { 's', CMD_FIND_PANE, 0 },
.target = { 't', CMD_FIND_PANE, 0 }, .target = { 't', CMD_FIND_PANE, 0 },
@ -93,6 +93,11 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item)
window_copy_pageup(wp, 0); window_copy_pageup(wp, 0);
if (args_has(args, 'd')) if (args_has(args, 'd'))
window_copy_pagedown(wp, 0, args_has(args, 'e')); window_copy_pagedown(wp, 0, args_has(args, 'e'));
if (args_has(args, 'S')) {
window_copy_scroll(wp, c->tty.mouse_slider_mpos, event->m.y,
args_has(args, 'e'));
return (CMD_RETURN_NORMAL);
}
return (CMD_RETURN_NORMAL); return (CMD_RETURN_NORMAL);
} }

View File

@ -478,6 +478,11 @@ key_bindings_init(void)
"bind -n MouseDown3Pane { if -Ft= '#{||:#{mouse_any_flag},#{&&:#{pane_in_mode},#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}}}' { select-pane -t=; send -M } { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " } }", "bind -n MouseDown3Pane { if -Ft= '#{||:#{mouse_any_flag},#{&&:#{pane_in_mode},#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}}}' { select-pane -t=; send -M } { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " } }",
"bind -n M-MouseDown3Pane { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " }", "bind -n M-MouseDown3Pane { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " }",
/* Mouse on scrollbar. */
"bind -n MouseDown1ScrollbarUp { copy-mode -u }",
"bind -n MouseDown1ScrollbarDown { copy-mode -d }",
"bind -n MouseDrag1ScrollbarSlider { copy-mode -S }",
/* Copy mode (emacs) keys. */ /* Copy mode (emacs) keys. */
"bind -Tcopy-mode C-Space { send -X begin-selection }", "bind -Tcopy-mode C-Space { send -X begin-selection }",
"bind -Tcopy-mode C-a { send -X start-of-line }", "bind -Tcopy-mode C-a { send -X start-of-line }",

View File

@ -1005,6 +1005,10 @@ screen_redraw_draw_pane_scrollbar(struct screen_redraw_ctx *ctx,
screen_redraw_draw_scrollbar(ctx, wp, sb_pos, sb_x, sb_y, sb_h, screen_redraw_draw_scrollbar(ctx, wp, sb_pos, sb_x, sb_y, sb_h,
slider_h, slider_y); slider_h, slider_y);
/* Store current position and height of the slider */
wp->sb_slider_y = slider_y; /* top of slider y pos in scrollbar */
wp->sb_slider_h = slider_h; /* height of slider */
} }
static void static void

View File

@ -572,10 +572,12 @@ server_client_check_mouse(struct client *c, struct key_event *event)
{ {
struct mouse_event *m = &event->m; struct mouse_event *m = &event->m;
struct session *s = c->session, *fs; struct session *s = c->session, *fs;
struct options *wo = s->curw->window->options;
struct winlink *fwl; struct winlink *fwl;
struct window_pane *wp, *fwp; struct window_pane *wp, *fwp;
u_int x, y, b, sx, sy, px, py; u_int x, y, b, sx, sy, px, py, line = 0, sb_pos;
int ignore = 0; u_int sl_top, sl_bottom, sl_mpos = 0;
int ignore = 0, sb, sb_w, pane_status;
key_code key; key_code key;
struct timeval tv; struct timeval tv;
struct style_range *sr; struct style_range *sr;
@ -594,7 +596,10 @@ server_client_check_mouse(struct client *c, struct key_event *event)
STATUS_LEFT, STATUS_LEFT,
STATUS_RIGHT, STATUS_RIGHT,
STATUS_DEFAULT, STATUS_DEFAULT,
BORDER } where = NOWHERE; BORDER,
SCROLLBAR_UP,
SCROLLBAR_SLIDER,
SCROLLBAR_DOWN } where = NOWHERE;
log_debug("%s mouse %02x at %u,%u (last %u,%u) (%d)", c->name, m->b, log_debug("%s mouse %02x at %u,%u (last %u,%u) (%d)", c->name, m->b,
m->x, m->y, m->lx, m->ly, c->tty.mouse_drag_flag); m->x, m->y, m->lx, m->ly, c->tty.mouse_drag_flag);
@ -743,8 +748,14 @@ have_event:
} }
} }
/* Not on status line. Adjust position and check for border or pane. */ /*
* Not on status line. Adjust position and check for border, pane, or
* scrollbar.
*/
if (where == NOWHERE) { if (where == NOWHERE) {
if (c->tty.mouse_scrolling_flag)
where = SCROLLBAR_SLIDER;
else {
px = x; px = x;
if (m->statusat == 0 && y >= m->statuslines) if (m->statusat == 0 && y >= m->statuslines)
py = y - m->statuslines; py = y - m->statuslines;
@ -761,9 +772,62 @@ have_event:
px = px + m->ox; px = px + m->ox;
py = py + m->oy; py = py + m->oy;
/* Try inside the pane. */
wp = window_get_active_at(s->curw->window, px, py);
if (wp == NULL)
return (KEYC_UNKNOWN);
/* Try the scrollbar next to a pane. */
sb = options_get_number(wo, "pane-scrollbars");
sb_pos = options_get_number(wo,
"pane-scrollbars-position");
if (sb == PANE_SCROLLBARS_ALWAYS ||
(sb == PANE_SCROLLBARS_MODAL &&
window_pane_mode(wp) != WINDOW_PANE_NO_MODE))
sb_w = PANE_SCROLLBARS_WIDTH;
else
sb_w = 0;
pane_status = options_get_number(wo,
"pane-border-status");
if (pane_status == PANE_STATUS_TOP)
line = wp->yoff - 1;
else if (pane_status == PANE_STATUS_BOTTOM)
line = wp->yoff + wp->sy;
/*
* Check if py could lie within a scrollbar. If the
* pane is at the top, then py is 0; if not then the
* top, then yoff to yoff + sy.
*/
if ((pane_status != PANE_STATUS_OFF && py != line) ||
(wp->yoff == 0 && py < wp->sy) ||
(py >= wp->yoff && py < wp->yoff + wp->sy)) {
if ((sb_pos == PANE_SCROLLBARS_RIGHT &&
(px >= wp->xoff + wp->sx &&
px < wp->xoff + wp->sx + sb_w)) ||
(sb_pos == PANE_SCROLLBARS_LEFT &&
(px >= wp->xoff - sb_w &&
px < wp->xoff))) {
sl_top = wp->yoff + wp->sb_slider_y;
sl_bottom = (wp->yoff +
wp->sb_slider_y +
wp->sb_slider_h - 1);
if (py < sl_top)
where = SCROLLBAR_UP;
else if (py >= sl_top &&
py <= sl_bottom) {
where = SCROLLBAR_SLIDER;
sl_mpos = (py -
wp->sb_slider_y - wp->yoff);
} else /* py > sl_bottom */
where = SCROLLBAR_DOWN;
} else
where = PANE;
} else {
/* Try the pane borders if not zoomed. */ /* Try the pane borders if not zoomed. */
if (~s->curw->window->flags & WINDOW_ZOOMED) { if (~s->curw->window->flags & WINDOW_ZOOMED) {
TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { TAILQ_FOREACH(wp,
&s->curw->window->panes, entry) {
if ((wp->xoff + wp->sx == px && if ((wp->xoff + wp->sx == px &&
wp->yoff <= 1 + py && wp->yoff <= 1 + py &&
wp->yoff + wp->sy >= py) || wp->yoff + wp->sy >= py) ||
@ -775,22 +839,23 @@ have_event:
if (wp != NULL) if (wp != NULL)
where = BORDER; where = BORDER;
} }
/* Otherwise try inside the pane. */
if (where == NOWHERE) {
wp = window_get_active_at(s->curw->window, px, py);
if (wp != NULL)
where = PANE;
else
return (KEYC_UNKNOWN);
} }
if (where == PANE) if (where == PANE) {
log_debug("mouse %u,%u on pane %%%u", x, y, wp->id); log_debug("mouse %u,%u on pane %%%u", x, y,
else if (where == BORDER) wp->id);
} else if (where == BORDER)
log_debug("mouse on pane %%%u border", wp->id); log_debug("mouse on pane %%%u border", wp->id);
else if (where == SCROLLBAR_UP ||
where == SCROLLBAR_SLIDER ||
where == SCROLLBAR_DOWN) {
log_debug("mouse on pane %%%u scrollbar",
wp->id);
}
m->wp = wp->id; m->wp = wp->id;
m->w = wp->window->id; m->w = wp->window->id;
} }
} else
m->wp = -1;
/* Stop dragging if needed. */ /* Stop dragging if needed. */
if (type != DRAG && type != WHEEL && c->tty.mouse_drag_flag != 0) { if (type != DRAG && type != WHEEL && c->tty.mouse_drag_flag != 0) {
@ -799,6 +864,7 @@ have_event:
c->tty.mouse_drag_update = NULL; c->tty.mouse_drag_update = NULL;
c->tty.mouse_drag_release = NULL; c->tty.mouse_drag_release = NULL;
c->tty.mouse_scrolling_flag = 0;
/* /*
* End a mouse drag by passing a MouseDragEnd key corresponding * End a mouse drag by passing a MouseDragEnd key corresponding
@ -816,6 +882,8 @@ have_event:
key = KEYC_MOUSEDRAGEND1_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND1_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND1_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND1_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND1_BORDER; key = KEYC_MOUSEDRAGEND1_BORDER;
break; break;
@ -830,6 +898,8 @@ have_event:
key = KEYC_MOUSEDRAGEND2_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND2_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND2_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND2_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND2_BORDER; key = KEYC_MOUSEDRAGEND2_BORDER;
break; break;
@ -844,6 +914,8 @@ have_event:
key = KEYC_MOUSEDRAGEND3_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND3_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND3_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND3_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND3_BORDER; key = KEYC_MOUSEDRAGEND3_BORDER;
break; break;
@ -858,6 +930,8 @@ have_event:
key = KEYC_MOUSEDRAGEND6_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND6_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND6_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND6_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND6_BORDER; key = KEYC_MOUSEDRAGEND6_BORDER;
break; break;
@ -872,6 +946,8 @@ have_event:
key = KEYC_MOUSEDRAGEND7_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND7_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND7_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND7_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND7_BORDER; key = KEYC_MOUSEDRAGEND7_BORDER;
break; break;
@ -886,6 +962,8 @@ have_event:
key = KEYC_MOUSEDRAGEND8_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND8_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND8_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND8_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND8_BORDER; key = KEYC_MOUSEDRAGEND8_BORDER;
break; break;
@ -900,6 +978,8 @@ have_event:
key = KEYC_MOUSEDRAGEND9_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND9_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND9_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND9_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND9_BORDER; key = KEYC_MOUSEDRAGEND9_BORDER;
break; break;
@ -914,6 +994,8 @@ have_event:
key = KEYC_MOUSEDRAGEND10_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND10_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND10_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND10_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND10_BORDER; key = KEYC_MOUSEDRAGEND10_BORDER;
break; break;
@ -928,6 +1010,8 @@ have_event:
key = KEYC_MOUSEDRAGEND11_STATUS_RIGHT; key = KEYC_MOUSEDRAGEND11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAGEND11_STATUS_DEFAULT; key = KEYC_MOUSEDRAGEND11_STATUS_DEFAULT;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAGEND11_SCROLLBAR_SLIDER;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAGEND11_BORDER; key = KEYC_MOUSEDRAGEND11_BORDER;
break; break;
@ -936,6 +1020,7 @@ have_event:
break; break;
} }
c->tty.mouse_drag_flag = 0; c->tty.mouse_drag_flag = 0;
c->tty.mouse_slider_mpos = -1;
goto out; goto out;
} }
@ -974,6 +1059,12 @@ have_event:
key = KEYC_MOUSEDRAG1_STATUS_RIGHT; key = KEYC_MOUSEDRAG1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG1_STATUS_DEFAULT; key = KEYC_MOUSEDRAG1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG1_BORDER; key = KEYC_MOUSEDRAG1_BORDER;
break; break;
@ -988,6 +1079,12 @@ have_event:
key = KEYC_MOUSEDRAG2_STATUS_RIGHT; key = KEYC_MOUSEDRAG2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG2_STATUS_DEFAULT; key = KEYC_MOUSEDRAG2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG2_BORDER; key = KEYC_MOUSEDRAG2_BORDER;
break; break;
@ -1002,6 +1099,12 @@ have_event:
key = KEYC_MOUSEDRAG3_STATUS_RIGHT; key = KEYC_MOUSEDRAG3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG3_STATUS_DEFAULT; key = KEYC_MOUSEDRAG3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG3_BORDER; key = KEYC_MOUSEDRAG3_BORDER;
break; break;
@ -1016,6 +1119,12 @@ have_event:
key = KEYC_MOUSEDRAG6_STATUS_RIGHT; key = KEYC_MOUSEDRAG6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG6_STATUS_DEFAULT; key = KEYC_MOUSEDRAG6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG6_BORDER; key = KEYC_MOUSEDRAG6_BORDER;
break; break;
@ -1030,6 +1139,12 @@ have_event:
key = KEYC_MOUSEDRAG7_STATUS_RIGHT; key = KEYC_MOUSEDRAG7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG7_STATUS_DEFAULT; key = KEYC_MOUSEDRAG7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG7_BORDER; key = KEYC_MOUSEDRAG7_BORDER;
break; break;
@ -1044,6 +1159,12 @@ have_event:
key = KEYC_MOUSEDRAG8_STATUS_RIGHT; key = KEYC_MOUSEDRAG8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG8_STATUS_DEFAULT; key = KEYC_MOUSEDRAG8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG8_BORDER; key = KEYC_MOUSEDRAG8_BORDER;
break; break;
@ -1058,6 +1179,12 @@ have_event:
key = KEYC_MOUSEDRAG9_STATUS_RIGHT; key = KEYC_MOUSEDRAG9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG9_STATUS_DEFAULT; key = KEYC_MOUSEDRAG9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG9_BORDER; key = KEYC_MOUSEDRAG9_BORDER;
break; break;
@ -1072,6 +1199,12 @@ have_event:
key = KEYC_MOUSEDRAG10_STATUS_RIGHT; key = KEYC_MOUSEDRAG10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG10_STATUS_DEFAULT; key = KEYC_MOUSEDRAG10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG10_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG10_BORDER; key = KEYC_MOUSEDRAG10_BORDER;
break; break;
@ -1086,6 +1219,12 @@ have_event:
key = KEYC_MOUSEDRAG11_STATUS_RIGHT; key = KEYC_MOUSEDRAG11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDRAG11_STATUS_DEFAULT; key = KEYC_MOUSEDRAG11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDRAG11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDRAG11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDRAG11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDRAG11_BORDER; key = KEYC_MOUSEDRAG11_BORDER;
break; break;
@ -1094,9 +1233,16 @@ have_event:
/* /*
* Begin a drag by setting the flag to a non-zero value that * Begin a drag by setting the flag to a non-zero value that
* corresponds to the mouse button in use. * corresponds to the mouse button in use. If starting to drag
* the scrollbar, store the relative position in the slider
* where the user grabbed.
*/ */
c->tty.mouse_drag_flag = MOUSE_BUTTONS(b) + 1; c->tty.mouse_drag_flag = MOUSE_BUTTONS(b) + 1;
if (c->tty.mouse_scrolling_flag == 0 &&
where == SCROLLBAR_SLIDER) {
c->tty.mouse_scrolling_flag = 1;
c->tty.mouse_slider_mpos = sl_mpos;
}
break; break;
case WHEEL: case WHEEL:
if (MOUSE_BUTTONS(b) == MOUSE_WHEEL_UP) { if (MOUSE_BUTTONS(b) == MOUSE_WHEEL_UP) {
@ -1140,6 +1286,12 @@ have_event:
key = KEYC_MOUSEUP1_STATUS_RIGHT; key = KEYC_MOUSEUP1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP1_STATUS_DEFAULT; key = KEYC_MOUSEUP1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP1_BORDER; key = KEYC_MOUSEUP1_BORDER;
break; break;
@ -1154,6 +1306,12 @@ have_event:
key = KEYC_MOUSEUP2_STATUS_RIGHT; key = KEYC_MOUSEUP2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP2_STATUS_DEFAULT; key = KEYC_MOUSEUP2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP2_BORDER; key = KEYC_MOUSEUP2_BORDER;
break; break;
@ -1168,6 +1326,12 @@ have_event:
key = KEYC_MOUSEUP3_STATUS_RIGHT; key = KEYC_MOUSEUP3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP3_STATUS_DEFAULT; key = KEYC_MOUSEUP3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP3_BORDER; key = KEYC_MOUSEUP3_BORDER;
break; break;
@ -1182,6 +1346,12 @@ have_event:
key = KEYC_MOUSEUP6_STATUS_RIGHT; key = KEYC_MOUSEUP6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP6_STATUS_DEFAULT; key = KEYC_MOUSEUP6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP6_BORDER; key = KEYC_MOUSEUP6_BORDER;
break; break;
@ -1196,6 +1366,12 @@ have_event:
key = KEYC_MOUSEUP7_STATUS_RIGHT; key = KEYC_MOUSEUP7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP7_STATUS_DEFAULT; key = KEYC_MOUSEUP7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP7_BORDER; key = KEYC_MOUSEUP7_BORDER;
break; break;
@ -1210,6 +1386,12 @@ have_event:
key = KEYC_MOUSEUP8_STATUS_RIGHT; key = KEYC_MOUSEUP8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP8_STATUS_DEFAULT; key = KEYC_MOUSEUP8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP8_BORDER; key = KEYC_MOUSEUP8_BORDER;
break; break;
@ -1224,6 +1406,12 @@ have_event:
key = KEYC_MOUSEUP9_STATUS_RIGHT; key = KEYC_MOUSEUP9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP9_STATUS_DEFAULT; key = KEYC_MOUSEUP9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP9_BORDER; key = KEYC_MOUSEUP9_BORDER;
break; break;
@ -1237,7 +1425,13 @@ have_event:
if (where == STATUS_RIGHT) if (where == STATUS_RIGHT)
key = KEYC_MOUSEUP1_STATUS_RIGHT; key = KEYC_MOUSEUP1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP1_STATUS_DEFAULT; key = KEYC_MOUSEUP10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP1_BORDER; key = KEYC_MOUSEUP1_BORDER;
break; break;
@ -1252,6 +1446,12 @@ have_event:
key = KEYC_MOUSEUP11_STATUS_RIGHT; key = KEYC_MOUSEUP11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEUP11_STATUS_DEFAULT; key = KEYC_MOUSEUP11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEUP11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEUP11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEUP11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEUP11_BORDER; key = KEYC_MOUSEUP11_BORDER;
break; break;
@ -1270,6 +1470,12 @@ have_event:
key = KEYC_MOUSEDOWN1_STATUS_RIGHT; key = KEYC_MOUSEDOWN1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN1_STATUS_DEFAULT; key = KEYC_MOUSEDOWN1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN1_BORDER; key = KEYC_MOUSEDOWN1_BORDER;
break; break;
@ -1284,6 +1490,12 @@ have_event:
key = KEYC_MOUSEDOWN2_STATUS_RIGHT; key = KEYC_MOUSEDOWN2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN2_STATUS_DEFAULT; key = KEYC_MOUSEDOWN2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN2_BORDER; key = KEYC_MOUSEDOWN2_BORDER;
break; break;
@ -1298,6 +1510,12 @@ have_event:
key = KEYC_MOUSEDOWN3_STATUS_RIGHT; key = KEYC_MOUSEDOWN3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN3_STATUS_DEFAULT; key = KEYC_MOUSEDOWN3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN3_BORDER; key = KEYC_MOUSEDOWN3_BORDER;
break; break;
@ -1312,6 +1530,12 @@ have_event:
key = KEYC_MOUSEDOWN6_STATUS_RIGHT; key = KEYC_MOUSEDOWN6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN6_STATUS_DEFAULT; key = KEYC_MOUSEDOWN6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN6_BORDER; key = KEYC_MOUSEDOWN6_BORDER;
break; break;
@ -1326,6 +1550,12 @@ have_event:
key = KEYC_MOUSEDOWN7_STATUS_RIGHT; key = KEYC_MOUSEDOWN7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN7_STATUS_DEFAULT; key = KEYC_MOUSEDOWN7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN7_BORDER; key = KEYC_MOUSEDOWN7_BORDER;
break; break;
@ -1340,6 +1570,12 @@ have_event:
key = KEYC_MOUSEDOWN8_STATUS_RIGHT; key = KEYC_MOUSEDOWN8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN8_STATUS_DEFAULT; key = KEYC_MOUSEDOWN8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN8_BORDER; key = KEYC_MOUSEDOWN8_BORDER;
break; break;
@ -1354,6 +1590,12 @@ have_event:
key = KEYC_MOUSEDOWN9_STATUS_RIGHT; key = KEYC_MOUSEDOWN9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN9_STATUS_DEFAULT; key = KEYC_MOUSEDOWN9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN9_BORDER; key = KEYC_MOUSEDOWN9_BORDER;
break; break;
@ -1368,6 +1610,12 @@ have_event:
key = KEYC_MOUSEDOWN10_STATUS_RIGHT; key = KEYC_MOUSEDOWN10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN10_STATUS_DEFAULT; key = KEYC_MOUSEDOWN10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN10_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN10_BORDER; key = KEYC_MOUSEDOWN10_BORDER;
break; break;
@ -1382,6 +1630,12 @@ have_event:
key = KEYC_MOUSEDOWN11_STATUS_RIGHT; key = KEYC_MOUSEDOWN11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_MOUSEDOWN11_STATUS_DEFAULT; key = KEYC_MOUSEDOWN11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_MOUSEDOWN11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_MOUSEDOWN11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_MOUSEDOWN11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_MOUSEDOWN11_BORDER; key = KEYC_MOUSEDOWN11_BORDER;
break; break;
@ -1400,6 +1654,12 @@ have_event:
key = KEYC_SECONDCLICK1_STATUS_RIGHT; key = KEYC_SECONDCLICK1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK1_STATUS_DEFAULT; key = KEYC_SECONDCLICK1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK1_BORDER; key = KEYC_SECONDCLICK1_BORDER;
break; break;
@ -1414,6 +1674,12 @@ have_event:
key = KEYC_SECONDCLICK2_STATUS_RIGHT; key = KEYC_SECONDCLICK2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK2_STATUS_DEFAULT; key = KEYC_SECONDCLICK2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK2_BORDER; key = KEYC_SECONDCLICK2_BORDER;
break; break;
@ -1428,6 +1694,12 @@ have_event:
key = KEYC_SECONDCLICK3_STATUS_RIGHT; key = KEYC_SECONDCLICK3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK3_STATUS_DEFAULT; key = KEYC_SECONDCLICK3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK3_BORDER; key = KEYC_SECONDCLICK3_BORDER;
break; break;
@ -1442,6 +1714,12 @@ have_event:
key = KEYC_SECONDCLICK6_STATUS_RIGHT; key = KEYC_SECONDCLICK6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK6_STATUS_DEFAULT; key = KEYC_SECONDCLICK6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK6_BORDER; key = KEYC_SECONDCLICK6_BORDER;
break; break;
@ -1456,6 +1734,12 @@ have_event:
key = KEYC_SECONDCLICK7_STATUS_RIGHT; key = KEYC_SECONDCLICK7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK7_STATUS_DEFAULT; key = KEYC_SECONDCLICK7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK7_BORDER; key = KEYC_SECONDCLICK7_BORDER;
break; break;
@ -1470,6 +1754,12 @@ have_event:
key = KEYC_SECONDCLICK8_STATUS_RIGHT; key = KEYC_SECONDCLICK8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK8_STATUS_DEFAULT; key = KEYC_SECONDCLICK8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK8_BORDER; key = KEYC_SECONDCLICK8_BORDER;
break; break;
@ -1484,6 +1774,12 @@ have_event:
key = KEYC_SECONDCLICK9_STATUS_RIGHT; key = KEYC_SECONDCLICK9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK9_STATUS_DEFAULT; key = KEYC_SECONDCLICK9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK9_BORDER; key = KEYC_SECONDCLICK9_BORDER;
break; break;
@ -1498,6 +1794,12 @@ have_event:
key = KEYC_SECONDCLICK10_STATUS_RIGHT; key = KEYC_SECONDCLICK10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK10_STATUS_DEFAULT; key = KEYC_SECONDCLICK10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK10_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK10_BORDER; key = KEYC_SECONDCLICK10_BORDER;
break; break;
@ -1512,6 +1814,12 @@ have_event:
key = KEYC_SECONDCLICK11_STATUS_RIGHT; key = KEYC_SECONDCLICK11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_SECONDCLICK11_STATUS_DEFAULT; key = KEYC_SECONDCLICK11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_SECONDCLICK11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_SECONDCLICK11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_SECONDCLICK11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_SECONDCLICK11_BORDER; key = KEYC_SECONDCLICK11_BORDER;
break; break;
@ -1530,6 +1838,12 @@ have_event:
key = KEYC_DOUBLECLICK1_STATUS_RIGHT; key = KEYC_DOUBLECLICK1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK1_STATUS_DEFAULT; key = KEYC_DOUBLECLICK1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK1_BORDER; key = KEYC_DOUBLECLICK1_BORDER;
break; break;
@ -1544,6 +1858,12 @@ have_event:
key = KEYC_DOUBLECLICK2_STATUS_RIGHT; key = KEYC_DOUBLECLICK2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK2_STATUS_DEFAULT; key = KEYC_DOUBLECLICK2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK2_BORDER; key = KEYC_DOUBLECLICK2_BORDER;
break; break;
@ -1558,6 +1878,12 @@ have_event:
key = KEYC_DOUBLECLICK3_STATUS_RIGHT; key = KEYC_DOUBLECLICK3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK3_STATUS_DEFAULT; key = KEYC_DOUBLECLICK3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK3_BORDER; key = KEYC_DOUBLECLICK3_BORDER;
break; break;
@ -1572,6 +1898,12 @@ have_event:
key = KEYC_DOUBLECLICK6_STATUS_RIGHT; key = KEYC_DOUBLECLICK6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK6_STATUS_DEFAULT; key = KEYC_DOUBLECLICK6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK6_BORDER; key = KEYC_DOUBLECLICK6_BORDER;
break; break;
@ -1586,6 +1918,12 @@ have_event:
key = KEYC_DOUBLECLICK7_STATUS_RIGHT; key = KEYC_DOUBLECLICK7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK7_STATUS_DEFAULT; key = KEYC_DOUBLECLICK7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK7_BORDER; key = KEYC_DOUBLECLICK7_BORDER;
break; break;
@ -1600,6 +1938,12 @@ have_event:
key = KEYC_DOUBLECLICK8_STATUS_RIGHT; key = KEYC_DOUBLECLICK8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK8_STATUS_DEFAULT; key = KEYC_DOUBLECLICK8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK8_BORDER; key = KEYC_DOUBLECLICK8_BORDER;
break; break;
@ -1614,6 +1958,12 @@ have_event:
key = KEYC_DOUBLECLICK9_STATUS_RIGHT; key = KEYC_DOUBLECLICK9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK9_STATUS_DEFAULT; key = KEYC_DOUBLECLICK9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK9_BORDER; key = KEYC_DOUBLECLICK9_BORDER;
break; break;
@ -1628,6 +1978,12 @@ have_event:
key = KEYC_DOUBLECLICK10_STATUS_RIGHT; key = KEYC_DOUBLECLICK10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK10_STATUS_DEFAULT; key = KEYC_DOUBLECLICK10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK10_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK10_BORDER; key = KEYC_DOUBLECLICK10_BORDER;
break; break;
@ -1642,6 +1998,12 @@ have_event:
key = KEYC_DOUBLECLICK11_STATUS_RIGHT; key = KEYC_DOUBLECLICK11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_DOUBLECLICK11_STATUS_DEFAULT; key = KEYC_DOUBLECLICK11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_DOUBLECLICK11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_DOUBLECLICK11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_DOUBLECLICK11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_DOUBLECLICK11_BORDER; key = KEYC_DOUBLECLICK11_BORDER;
break; break;
@ -1660,6 +2022,12 @@ have_event:
key = KEYC_TRIPLECLICK1_STATUS_RIGHT; key = KEYC_TRIPLECLICK1_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK1_STATUS_DEFAULT; key = KEYC_TRIPLECLICK1_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK1_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK1_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK1_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK1_BORDER; key = KEYC_TRIPLECLICK1_BORDER;
break; break;
@ -1674,6 +2042,12 @@ have_event:
key = KEYC_TRIPLECLICK2_STATUS_RIGHT; key = KEYC_TRIPLECLICK2_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK2_STATUS_DEFAULT; key = KEYC_TRIPLECLICK2_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK2_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK2_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK2_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK2_BORDER; key = KEYC_TRIPLECLICK2_BORDER;
break; break;
@ -1688,6 +2062,12 @@ have_event:
key = KEYC_TRIPLECLICK3_STATUS_RIGHT; key = KEYC_TRIPLECLICK3_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK3_STATUS_DEFAULT; key = KEYC_TRIPLECLICK3_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK3_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK3_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK3_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK3_BORDER; key = KEYC_TRIPLECLICK3_BORDER;
break; break;
@ -1702,6 +2082,12 @@ have_event:
key = KEYC_TRIPLECLICK6_STATUS_RIGHT; key = KEYC_TRIPLECLICK6_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK6_STATUS_DEFAULT; key = KEYC_TRIPLECLICK6_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK6_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK6_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK6_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK6_BORDER; key = KEYC_TRIPLECLICK6_BORDER;
break; break;
@ -1716,6 +2102,12 @@ have_event:
key = KEYC_TRIPLECLICK7_STATUS_RIGHT; key = KEYC_TRIPLECLICK7_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK7_STATUS_DEFAULT; key = KEYC_TRIPLECLICK7_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK7_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK7_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK7_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK7_BORDER; key = KEYC_TRIPLECLICK7_BORDER;
break; break;
@ -1730,6 +2122,12 @@ have_event:
key = KEYC_TRIPLECLICK8_STATUS_RIGHT; key = KEYC_TRIPLECLICK8_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK8_STATUS_DEFAULT; key = KEYC_TRIPLECLICK8_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK8_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK8_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK8_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK8_BORDER; key = KEYC_TRIPLECLICK8_BORDER;
break; break;
@ -1744,6 +2142,12 @@ have_event:
key = KEYC_TRIPLECLICK9_STATUS_RIGHT; key = KEYC_TRIPLECLICK9_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK9_STATUS_DEFAULT; key = KEYC_TRIPLECLICK9_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK9_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK9_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK9_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK9_BORDER; key = KEYC_TRIPLECLICK9_BORDER;
break; break;
@ -1758,6 +2162,12 @@ have_event:
key = KEYC_TRIPLECLICK10_STATUS_RIGHT; key = KEYC_TRIPLECLICK10_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK10_STATUS_DEFAULT; key = KEYC_TRIPLECLICK10_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK10_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK10_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK10_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK10_BORDER; key = KEYC_TRIPLECLICK10_BORDER;
break; break;
@ -1772,6 +2182,12 @@ have_event:
key = KEYC_TRIPLECLICK11_STATUS_RIGHT; key = KEYC_TRIPLECLICK11_STATUS_RIGHT;
if (where == STATUS_DEFAULT) if (where == STATUS_DEFAULT)
key = KEYC_TRIPLECLICK11_STATUS_DEFAULT; key = KEYC_TRIPLECLICK11_STATUS_DEFAULT;
if (where == SCROLLBAR_UP)
key = KEYC_TRIPLECLICK11_SCROLLBAR_UP;
if (where == SCROLLBAR_SLIDER)
key = KEYC_TRIPLECLICK11_SCROLLBAR_SLIDER;
if (where == SCROLLBAR_DOWN)
key = KEYC_TRIPLECLICK11_SCROLLBAR_DOWN;
if (where == BORDER) if (where == BORDER)
key = KEYC_TRIPLECLICK11_BORDER; key = KEYC_TRIPLECLICK11_BORDER;
break; break;

24
tmux.1
View File

@ -2402,22 +2402,31 @@ The synopsis for the
command is: command is:
.Bl -tag -width Ds .Bl -tag -width Ds
.It Xo Ic copy-mode .It Xo Ic copy-mode
.Op Fl deHMqu .Op Fl deHMqSu
.Op Fl s Ar src-pane .Op Fl s Ar src-pane
.Op Fl t Ar target-pane .Op Fl t Ar target-pane
.Xc .Xc
Enter copy mode. Enter copy mode.
.Pp
.Fl u .Fl u
also scrolls one page up after entering and enters copy mode and scrolls one page up and
.Fl d .Fl d
one page down if already in copy mode. one page down.
.Fl M
begins a mouse drag (only valid if bound to a mouse key binding, see
.Sx MOUSE SUPPORT ) .
.Fl H .Fl H
hides the position indicator in the top right. hides the position indicator in the top right.
.Fl q .Fl q
cancels copy mode and any other modes. cancels copy mode and any other modes.
.Pp
.Fl M
begins a mouse drag (only valid if bound to a mouse key binding, see
.Sx MOUSE SUPPORT ) .
.Fl S
scrolls when bound to a mouse drag event; for example,
.Ic copy-mode -Se
is bound to
.Ar MouseDrag1ScrollbarSlider
by default.
.Pp
.Fl s .Fl s
copies from copies from
.Ar src-pane .Ar src-pane
@ -5443,6 +5452,9 @@ and a location suffix, one of the following:
.It Li "StatusLeft" Ta "the left part of the status line" .It Li "StatusLeft" Ta "the left part of the status line"
.It Li "StatusRight" Ta "the right part of the status line" .It Li "StatusRight" Ta "the right part of the status line"
.It Li "StatusDefault" Ta "any other part of the status line" .It Li "StatusDefault" Ta "any other part of the status line"
.It Li "ScrollbarSlider" Ta "the scrollbar slider"
.It Li "ScrollbarUp" Ta "above the scrollbar slider"
.It Li "ScrollbarDown" Ta "below the scrollbar slider"
.El .El
.Pp .Pp
The following mouse events are available: The following mouse events are available:

13
tmux.h
View File

@ -184,6 +184,9 @@ struct winlink;
KEYC_ ## name ## _STATUS_LEFT, \ KEYC_ ## name ## _STATUS_LEFT, \
KEYC_ ## name ## _STATUS_RIGHT, \ KEYC_ ## name ## _STATUS_RIGHT, \
KEYC_ ## name ## _STATUS_DEFAULT, \ KEYC_ ## name ## _STATUS_DEFAULT, \
KEYC_ ## name ## _SCROLLBAR_UP, \
KEYC_ ## name ## _SCROLLBAR_SLIDER, \
KEYC_ ## name ## _SCROLLBAR_DOWN, \
KEYC_ ## name ## _BORDER KEYC_ ## name ## _BORDER
#define KEYC_MOUSE_STRING(name, s) \ #define KEYC_MOUSE_STRING(name, s) \
{ #s "Pane", KEYC_ ## name ## _PANE }, \ { #s "Pane", KEYC_ ## name ## _PANE }, \
@ -191,6 +194,9 @@ struct winlink;
{ #s "StatusLeft", KEYC_ ## name ## _STATUS_LEFT }, \ { #s "StatusLeft", KEYC_ ## name ## _STATUS_LEFT }, \
{ #s "StatusRight", KEYC_ ## name ## _STATUS_RIGHT }, \ { #s "StatusRight", KEYC_ ## name ## _STATUS_RIGHT }, \
{ #s "StatusDefault", KEYC_ ## name ## _STATUS_DEFAULT }, \ { #s "StatusDefault", KEYC_ ## name ## _STATUS_DEFAULT }, \
{ #s "ScrollbarUp", KEYC_ ## name ## _SCROLLBAR_UP }, \
{ #s "ScrollbarSlider", KEYC_ ## name ## _SCROLLBAR_SLIDER }, \
{ #s "ScrollbarDown", KEYC_ ## name ## _SCROLLBAR_DOWN }, \
{ #s "Border", KEYC_ ## name ## _BORDER } { #s "Border", KEYC_ ## name ## _BORDER }
/* /*
@ -1140,6 +1146,9 @@ struct window_pane {
#define PANE_UNSEENCHANGES 0x2000 #define PANE_UNSEENCHANGES 0x2000
#define PANE_REDRAWSCROLLBAR 0x4000 #define PANE_REDRAWSCROLLBAR 0x4000
u_int sb_slider_y;
u_int sb_slider_h;
int argc; int argc;
char **argv; char **argv;
char *shell; char *shell;
@ -1543,6 +1552,9 @@ struct tty {
u_int mouse_last_y; u_int mouse_last_y;
u_int mouse_last_b; u_int mouse_last_b;
int mouse_drag_flag; int mouse_drag_flag;
int mouse_scrolling_flag;
int mouse_slider_mpos;
void (*mouse_drag_update)(struct client *, void (*mouse_drag_update)(struct client *,
struct mouse_event *); struct mouse_event *);
void (*mouse_drag_release)(struct client *, void (*mouse_drag_release)(struct client *,
@ -3314,6 +3326,7 @@ void printflike(3, 4) window_copy_add(struct window_pane *, int, const char *,
...); ...);
void printflike(3, 0) window_copy_vadd(struct window_pane *, int, const char *, void printflike(3, 0) window_copy_vadd(struct window_pane *, int, const char *,
va_list); va_list);
void window_copy_scroll(struct window_pane *, int, u_int, int);
void window_copy_pageup(struct window_pane *, int); void window_copy_pageup(struct window_pane *, int);
void window_copy_pagedown(struct window_pane *, int, int); void window_copy_pagedown(struct window_pane *, int, int);
void window_copy_start_drag(struct client *, struct mouse_event *); void window_copy_start_drag(struct client *, struct mouse_event *);

View File

@ -40,6 +40,8 @@ static void window_copy_free(struct window_mode_entry *);
static void window_copy_resize(struct window_mode_entry *, u_int, u_int); static void window_copy_resize(struct window_mode_entry *, u_int, u_int);
static void window_copy_formats(struct window_mode_entry *, static void window_copy_formats(struct window_mode_entry *,
struct format_tree *); struct format_tree *);
static void window_copy_scroll1(struct window_mode_entry *,
struct window_pane *wp, int, u_int, int);
static void window_copy_pageup1(struct window_mode_entry *, int); static void window_copy_pageup1(struct window_mode_entry *, int);
static int window_copy_pagedown1(struct window_mode_entry *, int, int); static int window_copy_pagedown1(struct window_mode_entry *, int, int);
static void window_copy_next_paragraph(struct window_mode_entry *); static void window_copy_next_paragraph(struct window_mode_entry *);
@ -145,6 +147,9 @@ static void window_copy_acquire_cursor_up(struct window_mode_entry *,
u_int, u_int, u_int, u_int, u_int); u_int, u_int, u_int, u_int, u_int);
static void window_copy_acquire_cursor_down(struct window_mode_entry *, static void window_copy_acquire_cursor_down(struct window_mode_entry *,
u_int, u_int, u_int, u_int, u_int, u_int, int); u_int, u_int, u_int, u_int, u_int, u_int, int);
static u_int window_copy_clip_width(u_int, u_int, u_int, u_int);
static u_int window_copy_search_mark_match(struct window_copy_mode_data *,
u_int , u_int, u_int, int);
const struct window_mode window_copy_mode = { const struct window_mode window_copy_mode = {
.name = "copy-mode", .name = "copy-mode",
@ -598,6 +603,113 @@ window_copy_vadd(struct window_pane *wp, int parse, const char *fmt, va_list ap)
screen_write_stop(&ctx); screen_write_stop(&ctx);
} }
void
window_copy_scroll(struct window_pane *wp, int sl_mpos, u_int my,
int scroll_exit)
{
struct window_mode_entry *wme = TAILQ_FIRST(&wp->modes);
if (wme != NULL) {
window_set_active_pane(wp->window, wp, 0);
window_copy_scroll1(wme, wp, sl_mpos, my, scroll_exit);
}
}
static void
window_copy_scroll1(struct window_mode_entry *wme, struct window_pane *wp,
int sl_mpos, u_int my, int scroll_exit)
{
struct window_copy_mode_data *data = wme->data;
u_int ox, oy, px, py, n, offset, size;
u_int new_offset;
u_int slider_height = wp->sb_slider_h;
u_int sb_height = wp->sy, sb_top = wp->yoff;
u_int sy = screen_size_y(data->backing);
int new_slider_y, delta;
/*
* sl_mpos is where in the slider the user is dragging, mouse is
* dragging this y point relative to top of slider.
*/
if (my <= sb_top + sl_mpos) {
/* Slider banged into top. */
new_slider_y = sb_top - wp->yoff;
} else if (my - sl_mpos > sb_top + sb_height - slider_height) {
/* Slider banged into bottom. */
new_slider_y = sb_top - wp->yoff + (sb_height - slider_height);
} else {
/* Slider is somewhere in the middle. */
new_slider_y = my - wp->yoff - sl_mpos + 1;
}
if (TAILQ_FIRST(&wp->modes) == NULL ||
window_copy_get_current_offset(wp, &offset, &size) == 0)
return;
/*
* See screen_redraw_draw_pane_scrollbar - this is the inverse of the
* formula used there.
*/
new_offset = new_slider_y * ((float)(size + sb_height) / sb_height);
delta = (int)offset - new_offset;
/*
* Move pane view around based on delta relative to the cursor,
* maintaining the selection.
*/
oy = screen_hsize(data->backing) + data->cy - data->oy;
ox = window_copy_find_length(wme, oy);
if (data->cx != ox) {
data->lastcx = data->cx;
data->lastsx = ox;
}
data->cx = data->lastcx;
if (delta >= 0) {
n = (u_int)delta;
if (data->oy + n > screen_hsize(data->backing)) {
data->oy = screen_hsize(data->backing);
if (data->cy < n)
data->cy = 0;
else
data->cy -= n;
} else
data->oy += n;
} else {
n = (u_int)-delta;
if (data->oy < n) {
data->oy = 0;
if (data->cy + (n - data->oy) >= sy)
data->cy = sy - 1;
else
data->cy += n - data->oy;
} else
data->oy -= n;
}
/* Don't also drag tail when dragging a scrollbar, it looks weird. */
data->cursordrag = CURSORDRAG_NONE;
if (data->screen.sel == NULL || !data->rectflag) {
py = screen_hsize(data->backing) + data->cy - data->oy;
px = window_copy_find_length(wme, py);
if ((data->cx >= data->lastsx && data->cx != px) ||
data->cx > px)
window_copy_cursor_end_of_line(wme);
}
if (scroll_exit && data->oy == 0) {
window_pane_reset_mode(wp);
return;
}
if (data->searchmark != NULL && !data->timeout)
window_copy_search_marks(wme, NULL, data->searchregex, 1);
window_copy_update_selection(wme, 1, 0);
window_copy_redraw_screen(wme);
}
void void
window_copy_pageup(struct window_pane *wp, int half_page) window_copy_pageup(struct window_pane *wp, int half_page)
{ {
@ -3881,6 +3993,43 @@ window_copy_search_mark_at(struct window_copy_mode_data *data, u_int px,
return (0); return (0);
} }
static u_int
window_copy_clip_width(u_int width, u_int b, u_int sx, u_int sy)
{
return ((b + width > sx * sy) ? (sx * sy) - b : width);
}
static u_int
window_copy_search_mark_match(struct window_copy_mode_data *data, u_int px,
u_int py, u_int width, int regex)
{
struct grid *gd = data->backing->grid;
struct grid_cell gc;
u_int i, b, w = width, sx = gd->sx, sy = gd->sy;
if (window_copy_search_mark_at(data, px, py, &b) == 0) {
width = window_copy_clip_width(width, b, sx, sy);
w = width;
for (i = b; i < b + w; i++) {
if (!regex) {
grid_get_cell(gd, px + (i - b), py, &gc);
if (gc.flags & GRID_FLAG_TAB)
w += gc.data.width - 1;
w = window_copy_clip_width(w, b, sx, sy);
}
if (data->searchmark[i] != 0)
continue;
data->searchmark[i] = data->searchgen;
}
if (data->searchgen == UCHAR_MAX)
data->searchgen = 1;
else
data->searchgen++;
}
return (w);
}
static int static int
window_copy_search_marks(struct window_mode_entry *wme, struct screen *ssp, window_copy_search_marks(struct window_mode_entry *wme, struct screen *ssp,
int regex, int visible_only) int regex, int visible_only)
@ -3892,7 +4041,7 @@ window_copy_search_marks(struct window_mode_entry *wme, struct screen *ssp,
struct grid_cell gc; struct grid_cell gc;
int found, cis, stopped = 0; int found, cis, stopped = 0;
int cflags = REG_EXTENDED; int cflags = REG_EXTENDED;
u_int px, py, i, b, nfound = 0, width, tw; u_int px, py, nfound = 0, width;
u_int ssize = 1, start, end, sx = gd->sx; u_int ssize = 1, start, end, sx = gd->sx;
u_int sy = gd->sy; u_int sy = gd->sy;
char *sbuf; char *sbuf;
@ -3958,31 +4107,8 @@ again:
break; break;
} }
nfound++; nfound++;
px += window_copy_search_mark_match(data, px, py, width,
tw = width; regex);
if (window_copy_search_mark_at(data, px, py, &b) == 0) {
if (b + width > sx * sy)
width = (sx * sy) - b;
tw = width;
for (i = b; i < b + tw; i++) {
if (!regex) {
grid_get_cell(gd, px + (i - b),
py, &gc);
if (gc.flags & GRID_FLAG_TAB)
tw += gc.data.width - 1;
if (b + tw > sx * sy)
tw = (sx * sy) - b;
}
if (data->searchmark[i] != 0)
continue;
data->searchmark[i] = data->searchgen;
}
if (data->searchgen == UCHAR_MAX)
data->searchgen = 1;
else
data->searchgen++;
}
px += tw;
} }
t = get_timer(); t = get_timer();