diff --git a/options-table.c b/options-table.c index f056966d..78299328 100644 --- a/options-table.c +++ b/options-table.c @@ -665,6 +665,13 @@ const struct options_table_entry options_table[] = { .text = "Time for which status line messages should appear." }, + { .name = "focus-follows-mouse", + .type = OPTIONS_TABLE_FLAG, + .scope = OPTIONS_TABLE_SESSION, + .default_num = 0, + .text = "Whether moving the mouse into a pane selects it." + }, + { .name = "history-limit", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SESSION, diff --git a/server-client.c b/server-client.c index 2732f1fe..4cef9083 100644 --- a/server-client.c +++ b/server-client.c @@ -1064,8 +1064,16 @@ have_event: case NOTYPE: break; case MOVE: - if (where == PANE) + if (where == PANE) { key = KEYC_MOUSEMOVE_PANE; + if (wp != NULL && + wp != w->active && + options_get_number(s->options, "focus-follows-mouse")) { + window_set_active_pane(w, wp, 1); + server_redraw_window_borders(w); + server_status_window(w); + } + } if (where == STATUS) key = KEYC_MOUSEMOVE_STATUS; if (where == STATUS_LEFT) @@ -2973,7 +2981,8 @@ server_client_reset_state(struct client *c) /* * Set mouse mode if requested. To support dragging, always use button - * mode. + * mode. For focus-follows-mouse, we need all-motion mode to receive + * movement events. */ if (options_get_number(oo, "mouse")) { if (c->overlay_draw == NULL) { @@ -2983,7 +2992,9 @@ server_client_reset_state(struct client *c) mode |= MODE_MOUSE_ALL; } } - if (~mode & MODE_MOUSE_ALL) + if (options_get_number(oo, "focus-follows-mouse")) + mode |= MODE_MOUSE_ALL; + else if (~mode & MODE_MOUSE_ALL) mode |= MODE_MOUSE_BUTTON; } diff --git a/tmux.1 b/tmux.1 index a93a002e..4b88e203 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4242,6 +4242,12 @@ passed through to applications running in .Nm . Attached clients should be detached and attached again after changing this option. +.It Xo Ic focus-follows-mouse +.Op Ic on | off +.Xc +When enabled and +.Ic mouse +is on, moving the mouse into a pane selects it. .It Xo Ic get-clipboard .Op Ic both | request | buffer | off .Xc