mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	New option, mouse-select-pane. If on, the mouse may be used to select the
current pane. Suggested by sthen@ and also by someone else ages ago who I have forgotten.
This commit is contained in:
		@@ -67,6 +67,7 @@ const struct set_option_entry set_option_table[] = {
 | 
			
		||||
	{ "message-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL },
 | 
			
		||||
	{ "message-bg", SET_OPTION_COLOUR, 0, 0, NULL },
 | 
			
		||||
	{ "message-fg", SET_OPTION_COLOUR, 0, 0, NULL },
 | 
			
		||||
	{ "mouse-select-pane", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
	{ "prefix", SET_OPTION_KEYS, 0, 0, NULL },
 | 
			
		||||
	{ "repeat-time", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL },
 | 
			
		||||
	{ "set-remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								server.c
									
									
									
									
									
								
							@@ -825,6 +825,7 @@ server_handle_client(struct client *c)
 | 
			
		||||
	struct window		*w;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	struct screen		*s;
 | 
			
		||||
	struct options		*oo;
 | 
			
		||||
	struct timeval	 	 tv;
 | 
			
		||||
	struct key_binding	*bd;
 | 
			
		||||
	struct keylist		*keylist;
 | 
			
		||||
@@ -849,6 +850,7 @@ server_handle_client(struct client *c)
 | 
			
		||||
		c->session->activity = time(NULL);
 | 
			
		||||
		w = c->session->curw->window;
 | 
			
		||||
		wp = w->active;	/* could die */
 | 
			
		||||
		oo = &c->session->options;
 | 
			
		||||
 | 
			
		||||
		/* Special case: number keys jump to pane in identify mode. */
 | 
			
		||||
		if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') {	
 | 
			
		||||
@@ -868,6 +870,10 @@ server_handle_client(struct client *c)
 | 
			
		||||
 | 
			
		||||
		/* Check for mouse keys. */
 | 
			
		||||
		if (key == KEYC_MOUSE) {
 | 
			
		||||
			if (options_get_number(oo, "mouse-select-pane")) {
 | 
			
		||||
				window_set_active_at(w, mouse[1], mouse[2]);
 | 
			
		||||
				wp = w->active;
 | 
			
		||||
			}
 | 
			
		||||
			window_pane_mouse(wp, c, mouse[0], mouse[1], mouse[2]);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
@@ -935,7 +941,9 @@ server_handle_client(struct client *c)
 | 
			
		||||
	}
 | 
			
		||||
	if (c->session == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
	wp = c->session->curw->window->active;	/* could die - do each loop */
 | 
			
		||||
	w = c->session->curw->window;
 | 
			
		||||
	wp = w->active;
 | 
			
		||||
	oo = &c->session->options;
 | 
			
		||||
	s = wp->screen;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
@@ -948,7 +956,7 @@ server_handle_client(struct client *c)
 | 
			
		||||
	 * tty_region/tty_reset/tty_update_mode already take care of not
 | 
			
		||||
	 * resetting things that are already in their default state.
 | 
			
		||||
	 */
 | 
			
		||||
	status = options_get_number(&c->session->options, "status");
 | 
			
		||||
	status = options_get_number(oo, "status");
 | 
			
		||||
	tty_region(&c->tty, 0, c->tty.sy - 1, 0);
 | 
			
		||||
	if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - status)
 | 
			
		||||
		tty_cursor(&c->tty, 0, 0, 0, 0);
 | 
			
		||||
@@ -956,6 +964,9 @@ server_handle_client(struct client *c)
 | 
			
		||||
		tty_cursor(&c->tty, s->cx, s->cy, wp->xoff, wp->yoff);
 | 
			
		||||
 | 
			
		||||
	mode = s->mode;
 | 
			
		||||
	if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
 | 
			
		||||
	    options_get_number(oo, "mouse-select-pane"))
 | 
			
		||||
		mode |= MODE_MOUSE;
 | 
			
		||||
	tty_update_mode(&c->tty, mode);
 | 
			
		||||
	tty_reset(&c->tty);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1292,7 +1292,7 @@ with
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
If this option is
 | 
			
		||||
.Ic on 
 | 
			
		||||
.Ic on
 | 
			
		||||
(the default),
 | 
			
		||||
instead of each session locking individually as each has been
 | 
			
		||||
idle for
 | 
			
		||||
@@ -1336,6 +1336,14 @@ from the 256-colour palette, or
 | 
			
		||||
.Ic default .
 | 
			
		||||
.It Ic message-fg Ar colour
 | 
			
		||||
Set status line message foreground colour.
 | 
			
		||||
.It Xo Ic mouse-select-pane
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
If on,
 | 
			
		||||
.Nm
 | 
			
		||||
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 Ic prefix Ar keys
 | 
			
		||||
Set the keys accepted as a prefix key.
 | 
			
		||||
.Ar keys
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.c
									
									
									
									
									
								
							@@ -381,6 +381,7 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_number(so, "message-attr", 0);
 | 
			
		||||
	options_set_number(so, "message-bg", 3);
 | 
			
		||||
	options_set_number(so, "message-fg", 0);
 | 
			
		||||
	options_set_number(so, "mouse-select-pane", 0);
 | 
			
		||||
	options_set_number(so, "repeat-time", 500);
 | 
			
		||||
	options_set_number(so, "set-remain-on-exit", 0);
 | 
			
		||||
	options_set_number(so, "set-titles", 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1648,6 +1648,7 @@ struct window	*window_create(const char *, const char *, const char *,
 | 
			
		||||
		     const char *, struct environ *, struct termios *,
 | 
			
		||||
    		     u_int, u_int, u_int, char **);
 | 
			
		||||
void		 window_destroy(struct window *);
 | 
			
		||||
void		 window_set_active_at(struct window *, u_int, u_int);
 | 
			
		||||
void		 window_set_active_pane(struct window *, struct window_pane *);
 | 
			
		||||
struct window_pane *window_add_pane(struct window *, u_int);
 | 
			
		||||
void		 window_resize(struct window *, u_int, u_int);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								window.c
									
									
									
									
									
								
							@@ -304,6 +304,23 @@ window_set_active_pane(struct window *w, struct window_pane *wp)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_set_active_at(struct window *w, u_int x, u_int y)
 | 
			
		||||
{
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(wp, &w->panes, entry) {
 | 
			
		||||
		if (!window_pane_visible(wp))
 | 
			
		||||
			continue;
 | 
			
		||||
		if (x < wp->xoff || x >= wp->xoff + wp->sx)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (y < wp->yoff || y >= wp->yoff + wp->sy)
 | 
			
		||||
			continue;
 | 
			
		||||
		window_set_active_pane(w, wp);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct window_pane *
 | 
			
		||||
window_add_pane(struct window *w, u_int hlimit)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user