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:
Nicholas Marriott 2011-04-18 19:49:05 +00:00
parent 4e75e82cc3
commit 0bb2119781
5 changed files with 41 additions and 0 deletions

View File

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

View File

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

View File

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

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

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