mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Add -d flag to display-panes to specify timeout, and make 0 mean no
timeout. From Laurens Post.
This commit is contained in:
		| @@ -37,8 +37,8 @@ const struct cmd_entry cmd_display_panes_entry = { | |||||||
| 	.name = "display-panes", | 	.name = "display-panes", | ||||||
| 	.alias = "displayp", | 	.alias = "displayp", | ||||||
|  |  | ||||||
| 	.args = { "t:", 0, 1 }, | 	.args = { "d:t:", 0, 1 }, | ||||||
| 	.usage = CMD_TARGET_CLIENT_USAGE, | 	.usage = "[-d duration] " CMD_TARGET_CLIENT_USAGE, | ||||||
|  |  | ||||||
| 	.flags = CMD_AFTERHOOK, | 	.flags = CMD_AFTERHOOK, | ||||||
| 	.exec = cmd_display_panes_exec | 	.exec = cmd_display_panes_exec | ||||||
| @@ -49,6 +49,9 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| { | { | ||||||
| 	struct args	*args = self->args; | 	struct args	*args = self->args; | ||||||
| 	struct client	*c; | 	struct client	*c; | ||||||
|  | 	struct session	*s; | ||||||
|  | 	u_int		 delay; | ||||||
|  | 	char		*cause; | ||||||
|  |  | ||||||
| 	if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) | 	if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) | ||||||
| 		return (CMD_RETURN_ERROR); | 		return (CMD_RETURN_ERROR); | ||||||
| @@ -61,8 +64,18 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item) | |||||||
| 		c->identify_callback_data = xstrdup(args->argv[0]); | 		c->identify_callback_data = xstrdup(args->argv[0]); | ||||||
| 	else | 	else | ||||||
| 		c->identify_callback_data = xstrdup("select-pane -t '%%'"); | 		c->identify_callback_data = xstrdup("select-pane -t '%%'"); | ||||||
|  | 	s = c->session; | ||||||
|  |  | ||||||
| 	server_client_set_identify(c); | 	if (args_has(args, 'd')) { | ||||||
|  | 		delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause); | ||||||
|  | 		if (cause != NULL) { | ||||||
|  | 			cmdq_error(item, "delay %s", cause); | ||||||
|  | 			free(cause); | ||||||
|  | 			return (CMD_RETURN_ERROR); | ||||||
|  | 		} | ||||||
|  | 	} else | ||||||
|  | 		delay = options_get_number(s->options, "display-panes-time"); | ||||||
|  | 	server_client_set_identify(c, delay); | ||||||
|  |  | ||||||
| 	return (CMD_RETURN_NORMAL); | 	return (CMD_RETURN_NORMAL); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -74,19 +74,18 @@ server_client_callback_identify(__unused int fd, __unused short events, | |||||||
|  |  | ||||||
| /* Set identify mode on client. */ | /* Set identify mode on client. */ | ||||||
| void | void | ||||||
| server_client_set_identify(struct client *c) | server_client_set_identify(struct client *c, u_int delay) | ||||||
| { | { | ||||||
| 	struct timeval	tv; | 	struct timeval	tv; | ||||||
| 	int		delay; |  | ||||||
|  |  | ||||||
| 	delay = options_get_number(c->session->options, "display-panes-time"); |  | ||||||
| 	tv.tv_sec = delay / 1000; | 	tv.tv_sec = delay / 1000; | ||||||
| 	tv.tv_usec = (delay % 1000) * 1000L; | 	tv.tv_usec = (delay % 1000) * 1000L; | ||||||
|  |  | ||||||
| 	if (event_initialized(&c->identify_timer)) | 	if (event_initialized(&c->identify_timer)) | ||||||
| 		evtimer_del(&c->identify_timer); | 		evtimer_del(&c->identify_timer); | ||||||
| 	evtimer_set(&c->identify_timer, server_client_callback_identify, c); | 	evtimer_set(&c->identify_timer, server_client_callback_identify, c); | ||||||
| 	evtimer_add(&c->identify_timer, &tv); | 	if (delay != 0) | ||||||
|  | 		evtimer_add(&c->identify_timer, &tv); | ||||||
|  |  | ||||||
| 	c->flags |= CLIENT_IDENTIFY; | 	c->flags |= CLIENT_IDENTIFY; | ||||||
| 	c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR); | 	c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR); | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								tmux.1
									
									
									
									
									
								
							| @@ -1461,6 +1461,7 @@ specifies the format for each item in the tree. | |||||||
| This command works only if at least one client is attached. | This command works only if at least one client is attached. | ||||||
| .It Xo | .It Xo | ||||||
| .Ic display-panes | .Ic display-panes | ||||||
|  | .Op Fl d Ar duration | ||||||
| .Op Fl t Ar target-client | .Op Fl t Ar target-client | ||||||
| .Op Ar template | .Op Ar template | ||||||
| .Xc | .Xc | ||||||
| @@ -1468,11 +1469,19 @@ This command works only if at least one client is attached. | |||||||
| Display a visible indicator of each pane shown by | Display a visible indicator of each pane shown by | ||||||
| .Ar target-client . | .Ar target-client . | ||||||
| See the | See the | ||||||
| .Ic display-panes-time , | .Ic display-panes-colour | ||||||
| .Ic display-panes-colour , |  | ||||||
| and | and | ||||||
| .Ic display-panes-active-colour | .Ic display-panes-active-colour | ||||||
| session options. | session options. | ||||||
|  | The indicator is closed when a key is pressed or | ||||||
|  | .Ar duration | ||||||
|  | milliseconds have passed. | ||||||
|  | If | ||||||
|  | .Fl d | ||||||
|  | is not given, | ||||||
|  | .Ic display-panes-time | ||||||
|  | is used. | ||||||
|  | A duration of zero means the indicator stays until a key is pressed. | ||||||
| While the indicator is on screen, a pane may be chosen with the | While the indicator is on screen, a pane may be chosen with the | ||||||
| .Ql 0 | .Ql 0 | ||||||
| to | to | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -1870,7 +1870,7 @@ void	 server_add_accept(int); | |||||||
|  |  | ||||||
| /* server-client.c */ | /* server-client.c */ | ||||||
| u_int	 server_client_how_many(void); | u_int	 server_client_how_many(void); | ||||||
| void	 server_client_set_identify(struct client *); | void	 server_client_set_identify(struct client *, u_int); | ||||||
| void	 server_client_clear_identify(struct client *, struct window_pane *); | void	 server_client_clear_identify(struct client *, struct window_pane *); | ||||||
| void	 server_client_set_key_table(struct client *, const char *); | void	 server_client_set_key_table(struct client *, const char *); | ||||||
| const char *server_client_get_key_table(struct client *); | const char *server_client_get_key_table(struct client *); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm