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
|
.default_num = 0
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ .name = "mouse-select-window",
|
||||||
|
.type = OPTIONS_TABLE_FLAG,
|
||||||
|
.default_num = 0
|
||||||
|
},
|
||||||
|
|
||||||
{ .name = "mouse-utf8",
|
{ .name = "mouse-utf8",
|
||||||
.type = OPTIONS_TABLE_FLAG,
|
.type = OPTIONS_TABLE_FLAG,
|
||||||
.default_num = 0
|
.default_num = 0
|
||||||
|
@ -319,6 +319,12 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
|
|||||||
server_redraw_window_borders(w);
|
server_redraw_window_borders(w);
|
||||||
wp = w->active;
|
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);
|
window_pane_mouse(wp, c->session, mouse);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -459,6 +465,10 @@ server_client_reset_state(struct client *c)
|
|||||||
(mode & ALL_MOUSE_MODES) == 0)
|
(mode & ALL_MOUSE_MODES) == 0)
|
||||||
mode |= MODE_MOUSE_STANDARD;
|
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
|
* 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
|
* 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);
|
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. */
|
/* Draw status for client on the last lines of given context. */
|
||||||
int
|
int
|
||||||
status_redraw(struct client *c)
|
status_redraw(struct client *c)
|
||||||
@ -325,6 +342,7 @@ draw:
|
|||||||
wloffset++;
|
wloffset++;
|
||||||
|
|
||||||
/* Copy the window list. */
|
/* Copy the window list. */
|
||||||
|
s->wlmouse = -wloffset + wlstart;
|
||||||
screen_write_cursormove(&ctx, wloffset, 0);
|
screen_write_cursormove(&ctx, wloffset, 0);
|
||||||
screen_write_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1);
|
screen_write_copy(&ctx, &window_list, wlstart, 0, wlwidth, 1);
|
||||||
screen_free(&window_list);
|
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
|
captures the mouse and when a window is split into multiple panes the mouse may
|
||||||
be used to select the current pane.
|
be used to select the current pane.
|
||||||
The mouse click is also passed through to the application as normal.
|
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-bg Ar colour
|
||||||
.It Ic pane-active-border-fg Ar colour
|
.It Ic pane-active-border-fg Ar colour
|
||||||
Set the pane border colour for the currently active pane.
|
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;
|
struct environ environ;
|
||||||
|
|
||||||
|
int wlmouse;
|
||||||
|
|
||||||
int references;
|
int references;
|
||||||
|
|
||||||
TAILQ_ENTRY(session) gentry;
|
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);
|
RB_PROTOTYPE(status_out_tree, status_out, entry, status_out_cmp);
|
||||||
void status_free_jobs(struct status_out_tree *);
|
void status_free_jobs(struct status_out_tree *);
|
||||||
void status_update_jobs(struct client *);
|
void status_update_jobs(struct client *);
|
||||||
|
void status_set_window_at(struct client *, u_int);
|
||||||
int status_redraw(struct client *);
|
int status_redraw(struct client *);
|
||||||
char *status_replace(struct client *, struct session *,
|
char *status_replace(struct client *, struct session *,
|
||||||
struct winlink *, struct window_pane *, const char *, time_t, int);
|
struct winlink *, struct window_pane *, const char *, time_t, int);
|
||||||
|
Loading…
Reference in New Issue
Block a user