mirror of
https://github.com/tmux/tmux.git
synced 2025-01-14 20:58:53 +00:00
Add an option (mouse-select-window) which allows the mouse to be used by
clicking on the status line, written by hsim at gmx dot li.
This commit is contained in:
parent
4e75e82cc3
commit
0bb2119781
@ -198,6 +198,11 @@ const struct options_table_entry session_options_table[] = {
|
||||
.default_num = 0
|
||||
},
|
||||
|
||||
{ .name = "mouse-select-window",
|
||||
.type = OPTIONS_TABLE_FLAG,
|
||||
.default_num = 0
|
||||
},
|
||||
|
||||
{ .name = "mouse-utf8",
|
||||
.type = OPTIONS_TABLE_FLAG,
|
||||
.default_num = 0
|
||||
|
@ -319,6 +319,12 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
|
||||
server_redraw_window_borders(w);
|
||||
wp = w->active;
|
||||
}
|
||||
if (mouse->y + 1 == c->tty.sy && mouse->b == MOUSE_UP &&
|
||||
options_get_number(oo, "mouse-select-window") &&
|
||||
options_get_number(oo, "status")) {
|
||||
status_set_window_at(c, mouse->x);
|
||||
return;
|
||||
}
|
||||
window_pane_mouse(wp, c->session, mouse);
|
||||
return;
|
||||
}
|
||||
@ -459,6 +465,10 @@ server_client_reset_state(struct client *c)
|
||||
(mode & ALL_MOUSE_MODES) == 0)
|
||||
mode |= MODE_MOUSE_STANDARD;
|
||||
|
||||
if (options_get_number(oo, "mouse-select-window") &&
|
||||
(mode & ALL_MOUSE_MODES) == 0)
|
||||
mode |= MODE_MOUSE_STANDARD;
|
||||
|
||||
/*
|
||||
* Set UTF-8 mouse input if required. If the terminal is UTF-8, the
|
||||
* user has set mouse-utf8 and any mouse mode is in effect, turn on
|
||||
|
18
status.c
18
status.c
@ -120,6 +120,23 @@ status_redraw_get_right(struct client *c,
|
||||
return (right);
|
||||
}
|
||||
|
||||
/* Set window at window list position. */
|
||||
void
|
||||
status_set_window_at(struct client *c, u_int x)
|
||||
{
|
||||
struct session *s = c->session;
|
||||
struct winlink *wl;
|
||||
|
||||
x += s->wlmouse;
|
||||
RB_FOREACH(wl, winlinks, &s->windows) {
|
||||
if (x < wl->status_width &&
|
||||
session_select(s, wl->idx) == 0) {
|
||||
server_redraw_session(s);
|
||||
}
|
||||
x -= wl->status_width + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw status for client on the last lines of given context. */
|
||||
int
|
||||
status_redraw(struct client *c)
|
||||
@ -325,6 +342,7 @@ draw:
|
||||
wloffset++;
|
||||
|
||||
/* Copy the window list. */
|
||||
s->wlmouse = -wloffset + wlstart;
|
||||
screen_write_cursormove(&ctx, wloffset, 0);
|
||||
screen_write_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1);
|
||||
screen_free(&window_list);
|
||||
|
5
tmux.1
5
tmux.1
@ -1896,6 +1896,11 @@ If on,
|
||||
captures the mouse and when a window is split into multiple panes the mouse may
|
||||
be used to select the current pane.
|
||||
The mouse click is also passed through to the application as normal.
|
||||
.It Xo Ic mouse-select-window
|
||||
.Op Ic on | off
|
||||
.Xc
|
||||
If on, clicking the mouse on a window name in the status line will select that
|
||||
window.
|
||||
.It Ic pane-active-border-bg Ar colour
|
||||
.It Ic pane-active-border-fg Ar colour
|
||||
Set the pane border colour for the currently active pane.
|
||||
|
3
tmux.h
3
tmux.h
@ -957,6 +957,8 @@ struct session {
|
||||
|
||||
struct environ environ;
|
||||
|
||||
int wlmouse;
|
||||
|
||||
int references;
|
||||
|
||||
TAILQ_ENTRY(session) gentry;
|
||||
@ -1666,6 +1668,7 @@ int status_out_cmp(struct status_out *, struct status_out *);
|
||||
RB_PROTOTYPE(status_out_tree, status_out, entry, status_out_cmp);
|
||||
void status_free_jobs(struct status_out_tree *);
|
||||
void status_update_jobs(struct client *);
|
||||
void status_set_window_at(struct client *, u_int);
|
||||
int status_redraw(struct client *);
|
||||
char *status_replace(struct client *, struct session *,
|
||||
struct winlink *, struct window_pane *, const char *, time_t, int);
|
||||
|
Loading…
Reference in New Issue
Block a user