mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										6
									
								
								alerts.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								alerts.c
									
									
									
									
									
								
							@@ -178,7 +178,7 @@ alerts_check_bell(struct window *w)
 | 
			
		||||
		s = wl->session;
 | 
			
		||||
		if (s->curw != wl) {
 | 
			
		||||
			wl->flags |= WINLINK_BELL;
 | 
			
		||||
			notify_winlink("alert-bell", s, wl);
 | 
			
		||||
			notify_winlink("alert-bell", wl);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (s->flags & SESSION_ALERTED)
 | 
			
		||||
@@ -239,7 +239,7 @@ alerts_check_activity(struct window *w)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		wl->flags |= WINLINK_ACTIVITY;
 | 
			
		||||
		notify_winlink("alert-activity", s, wl);
 | 
			
		||||
		notify_winlink("alert-activity", wl);
 | 
			
		||||
 | 
			
		||||
		if (s->flags & SESSION_ALERTED)
 | 
			
		||||
			continue;
 | 
			
		||||
@@ -275,7 +275,7 @@ alerts_check_silence(struct window *w)
 | 
			
		||||
		if (s->curw == wl)
 | 
			
		||||
			continue;
 | 
			
		||||
		wl->flags |= WINLINK_SILENCE;
 | 
			
		||||
		notify_winlink("alert-silence", s, wl);
 | 
			
		||||
		notify_winlink("alert-silence", wl);
 | 
			
		||||
 | 
			
		||||
		if (s->flags & SESSION_ALERTED)
 | 
			
		||||
			continue;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								cfg.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								cfg.c
									
									
									
									
									
								
							@@ -31,7 +31,6 @@ static char	 *cfg_file;
 | 
			
		||||
int		  cfg_finished;
 | 
			
		||||
static char	**cfg_causes;
 | 
			
		||||
static u_int	  cfg_ncauses;
 | 
			
		||||
struct client	 *cfg_client;
 | 
			
		||||
 | 
			
		||||
static enum cmd_retval
 | 
			
		||||
cfg_done(__unused struct cmdq_item *item, __unused void *data)
 | 
			
		||||
@@ -43,8 +42,8 @@ cfg_done(__unused struct cmdq_item *item, __unused void *data)
 | 
			
		||||
	if (!RB_EMPTY(&sessions))
 | 
			
		||||
		cfg_show_causes(RB_MIN(sessions, &sessions));
 | 
			
		||||
 | 
			
		||||
	if (cfg_client != NULL)
 | 
			
		||||
		server_client_unref(cfg_client);
 | 
			
		||||
	status_prompt_load_history();
 | 
			
		||||
 | 
			
		||||
	return (CMD_RETURN_NORMAL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -61,20 +60,22 @@ start_cfg(void)
 | 
			
		||||
	const char	*home;
 | 
			
		||||
	int		 quiet = 0;
 | 
			
		||||
 | 
			
		||||
	cfg_client = TAILQ_FIRST(&clients);
 | 
			
		||||
	if (cfg_client != NULL)
 | 
			
		||||
		cfg_client->references++;
 | 
			
		||||
	/*
 | 
			
		||||
	 * Note that the configuration files are loaded without a client, so
 | 
			
		||||
	 * NULL is passed into load_cfg() which means that commands run in the
 | 
			
		||||
	 * global queue and item->client is NULL for all commands.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	load_cfg(TMUX_CONF, cfg_client, NULL, 1);
 | 
			
		||||
	load_cfg(TMUX_CONF, NULL, NULL, 1);
 | 
			
		||||
 | 
			
		||||
	if (cfg_file == NULL && (home = find_home()) != NULL) {
 | 
			
		||||
		xasprintf(&cfg_file, "%s/.tmux.conf", home);
 | 
			
		||||
		quiet = 1;
 | 
			
		||||
	}
 | 
			
		||||
	if (cfg_file != NULL)
 | 
			
		||||
		load_cfg(cfg_file, cfg_client, NULL, quiet);
 | 
			
		||||
		load_cfg(cfg_file, NULL, NULL, quiet);
 | 
			
		||||
 | 
			
		||||
	cmdq_append(cfg_client, cmdq_get_callback(cfg_done, NULL));
 | 
			
		||||
	cmdq_append(NULL, cmdq_get_callback(cfg_done, NULL));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,7 @@ cmd_attach_session(struct cmdq_item *item, int dflag, int rflag,
 | 
			
		||||
			environ_update(s->options, c->environ, s->environ);
 | 
			
		||||
 | 
			
		||||
		c->session = s;
 | 
			
		||||
		if (!item->repeat)
 | 
			
		||||
		if (~item->shared->flags & CMDQ_SHARED_REPEAT)
 | 
			
		||||
			server_client_set_key_table(c, NULL);
 | 
			
		||||
		status_timer_start(c);
 | 
			
		||||
		notify_client("client-session-changed", c);
 | 
			
		||||
 
 | 
			
		||||
@@ -56,12 +56,13 @@ static enum cmd_retval
 | 
			
		||||
cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
{
 | 
			
		||||
	struct args		*args = self->args;
 | 
			
		||||
	struct cmdq_shared	*shared = item->shared;
 | 
			
		||||
	struct client		*c = item->client;
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct window_pane	*wp = item->state.tflag.wp;
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'M')) {
 | 
			
		||||
		if ((wp = cmd_mouse_pane(&item->mouse, &s, NULL)) == NULL)
 | 
			
		||||
		if ((wp = cmd_mouse_pane(&shared->mouse, &s, NULL)) == NULL)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		if (c == NULL || c->session != s)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
@@ -80,7 +81,7 @@ cmd_copy_mode_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	if (args_has(args, 'M')) {
 | 
			
		||||
		if (wp->mode != NULL && wp->mode != &window_copy_mode)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		window_copy_start_drag(c, &item->mouse);
 | 
			
		||||
		window_copy_start_drag(c, &shared->mouse);
 | 
			
		||||
	}
 | 
			
		||||
	if (wp->mode == &window_copy_mode && args_has(self->args, 'u'))
 | 
			
		||||
		window_copy_pageup(wp, 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								cmd-find.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								cmd-find.c
									
									
									
									
									
								
							@@ -894,12 +894,11 @@ cmd_find_from_session(struct cmd_find_state *fs, struct session *s)
 | 
			
		||||
 | 
			
		||||
/* Find state from a winlink. */
 | 
			
		||||
int
 | 
			
		||||
cmd_find_from_winlink(struct cmd_find_state *fs, struct session *s,
 | 
			
		||||
    struct winlink *wl)
 | 
			
		||||
cmd_find_from_winlink(struct cmd_find_state *fs, struct winlink *wl)
 | 
			
		||||
{
 | 
			
		||||
	cmd_find_clear_state(fs, NULL, 0);
 | 
			
		||||
 | 
			
		||||
	fs->s = s;
 | 
			
		||||
	fs->s = wl->session;
 | 
			
		||||
	fs->wl = wl;
 | 
			
		||||
	fs->w = wl->window;
 | 
			
		||||
	fs->wp = wl->window->active;
 | 
			
		||||
@@ -997,8 +996,8 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_find_state *current,
 | 
			
		||||
	if (server_check_marked() && (flags & CMD_FIND_DEFAULT_MARKED)) {
 | 
			
		||||
		fs->current = &marked_pane;
 | 
			
		||||
		log_debug("%s: current is marked pane", __func__);
 | 
			
		||||
	} else if (cmd_find_valid_state(&item->current)) {
 | 
			
		||||
		fs->current = &item->current;
 | 
			
		||||
	} else if (cmd_find_valid_state(&item->shared->current)) {
 | 
			
		||||
		fs->current = &item->shared->current;
 | 
			
		||||
		log_debug("%s: current is from queue", __func__);
 | 
			
		||||
	} else {
 | 
			
		||||
		fs->current = current;
 | 
			
		||||
@@ -1014,7 +1013,7 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_find_state *current,
 | 
			
		||||
 | 
			
		||||
	/* Mouse target is a plain = or {mouse}. */
 | 
			
		||||
	if (strcmp(target, "=") == 0 || strcmp(target, "{mouse}") == 0) {
 | 
			
		||||
		m = &item->mouse;
 | 
			
		||||
		m = &item->shared->mouse;
 | 
			
		||||
		switch (type) {
 | 
			
		||||
		case CMD_FIND_PANE:
 | 
			
		||||
			fs->wp = cmd_mouse_pane(m, &fs->s, &fs->wl);
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,7 @@ static enum cmd_retval
 | 
			
		||||
cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
{
 | 
			
		||||
	struct args			*args = self->args;
 | 
			
		||||
	struct cmdq_shared		*shared = item->shared;
 | 
			
		||||
	struct cmd_if_shell_data	*cdata;
 | 
			
		||||
	char				*shellcmd, *cmd, *cause;
 | 
			
		||||
	struct cmd_list			*cmdlist;
 | 
			
		||||
@@ -100,7 +101,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
			}
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
		new_item = cmdq_get_command(cmdlist, NULL, &item->mouse, 0);
 | 
			
		||||
		new_item = cmdq_get_command(cmdlist, NULL, &shared->mouse, 0);
 | 
			
		||||
		cmdq_insert_after(item, new_item);
 | 
			
		||||
		cmd_list_free(cmdlist);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
@@ -125,7 +126,7 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
		cdata->item = item;
 | 
			
		||||
	else
 | 
			
		||||
		cdata->item = NULL;
 | 
			
		||||
	memcpy(&cdata->mouse, &item->mouse, sizeof cdata->mouse);
 | 
			
		||||
	memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse);
 | 
			
		||||
 | 
			
		||||
	job_run(shellcmd, s, cwd, NULL, cmd_if_shell_callback,
 | 
			
		||||
	    cmd_if_shell_free, cdata);
 | 
			
		||||
 
 | 
			
		||||
@@ -81,7 +81,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
		RB_FOREACH(bd, key_bindings, &table->key_bindings) {
 | 
			
		||||
			key = key_string_lookup_key(bd->key);
 | 
			
		||||
 | 
			
		||||
			if (bd->can_repeat)
 | 
			
		||||
			if (bd->flags & KEY_BINDING_REPEAT)
 | 
			
		||||
				repeat = 1;
 | 
			
		||||
 | 
			
		||||
			width = utf8_cstrwidth(table->name);
 | 
			
		||||
@@ -101,7 +101,7 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
 | 
			
		||||
			if (!repeat)
 | 
			
		||||
				r = "";
 | 
			
		||||
			else if (bd->can_repeat)
 | 
			
		||||
			else if (bd->flags & KEY_BINDING_REPEAT)
 | 
			
		||||
				r = "-r ";
 | 
			
		||||
			else
 | 
			
		||||
				r = "   ";
 | 
			
		||||
 
 | 
			
		||||
@@ -297,7 +297,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
		} else if (c->session != NULL)
 | 
			
		||||
			c->last_session = c->session;
 | 
			
		||||
		c->session = s;
 | 
			
		||||
		if (!item->repeat)
 | 
			
		||||
		if (~item->shared->flags & CMDQ_SHARED_REPEAT)
 | 
			
		||||
			server_client_set_key_table(c, NULL);
 | 
			
		||||
		status_timer_start(c);
 | 
			
		||||
		notify_client("client-session-changed", c);
 | 
			
		||||
 
 | 
			
		||||
@@ -147,7 +147,7 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	if (to_free != NULL)
 | 
			
		||||
		free((void *)to_free);
 | 
			
		||||
 | 
			
		||||
	cmd_find_from_winlink(&fs, s, wl);
 | 
			
		||||
	cmd_find_from_winlink(&fs, wl);
 | 
			
		||||
	hooks_insert(s->hooks, item, &fs, "after-new-window");
 | 
			
		||||
 | 
			
		||||
	return (CMD_RETURN_NORMAL);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								cmd-queue.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								cmd-queue.c
									
									
									
									
									
								
							@@ -102,8 +102,11 @@ cmdq_insert_after(struct cmdq_item *after, struct cmdq_item *item)
 | 
			
		||||
static void
 | 
			
		||||
cmdq_remove(struct cmdq_item *item)
 | 
			
		||||
{
 | 
			
		||||
	if (item->formats != NULL)
 | 
			
		||||
		format_free(item->formats);
 | 
			
		||||
	if (item->shared != NULL && --item->shared->references == 0) {
 | 
			
		||||
		if (item->shared->formats != NULL)
 | 
			
		||||
			format_free(item->shared->formats);
 | 
			
		||||
		free(item->shared);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (item->client != NULL)
 | 
			
		||||
		server_client_unref(item->client);
 | 
			
		||||
@@ -150,6 +153,13 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
 | 
			
		||||
	struct cmd		*cmd;
 | 
			
		||||
	u_int			 group = cmdq_next_group();
 | 
			
		||||
	char			*tmp;
 | 
			
		||||
	struct cmdq_shared	*shared;
 | 
			
		||||
 | 
			
		||||
	shared = xcalloc(1, sizeof *shared);
 | 
			
		||||
	if (current != NULL)
 | 
			
		||||
		cmd_find_copy_state(&shared->current, current);
 | 
			
		||||
	if (m != NULL)
 | 
			
		||||
		memcpy(&shared->mouse, m, sizeof shared->mouse);
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
 | 
			
		||||
		xasprintf(&tmp, "command[%s]", cmd->entry->name);
 | 
			
		||||
@@ -161,13 +171,11 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
 | 
			
		||||
		item->group = group;
 | 
			
		||||
		item->flags = flags;
 | 
			
		||||
 | 
			
		||||
		item->shared = shared;
 | 
			
		||||
		item->cmdlist = cmdlist;
 | 
			
		||||
		item->cmd = cmd;
 | 
			
		||||
 | 
			
		||||
		if (current != NULL)
 | 
			
		||||
			cmd_find_copy_state(&item->current, current);
 | 
			
		||||
		if (m != NULL)
 | 
			
		||||
			memcpy(&item->mouse, m, sizeof item->mouse);
 | 
			
		||||
		shared->references++;
 | 
			
		||||
		cmdlist->references++;
 | 
			
		||||
 | 
			
		||||
		if (first == NULL)
 | 
			
		||||
@@ -258,19 +266,17 @@ cmdq_fire_callback(struct cmdq_item *item)
 | 
			
		||||
void
 | 
			
		||||
cmdq_format(struct cmdq_item *item, const char *key, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	struct cmdq_shared	*shared = item->shared;
 | 
			
		||||
	va_list			 ap;
 | 
			
		||||
	struct cmdq_item	*loop;
 | 
			
		||||
	char			*value;
 | 
			
		||||
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	xvasprintf(&value, fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 | 
			
		||||
	for (loop = item; loop != NULL; loop = item->next) {
 | 
			
		||||
		if (loop->formats == NULL)
 | 
			
		||||
			loop->formats = format_create(NULL, FORMAT_NONE, 0);
 | 
			
		||||
		format_add(loop->formats, key, "%s", value);
 | 
			
		||||
	}
 | 
			
		||||
	if (shared->formats == NULL)
 | 
			
		||||
		shared->formats = format_create(NULL, FORMAT_NONE, 0);
 | 
			
		||||
	format_add(shared->formats, key, "%s", value);
 | 
			
		||||
 | 
			
		||||
	free(value);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ static enum cmd_retval
 | 
			
		||||
cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
{
 | 
			
		||||
	struct args		*args = self->args;
 | 
			
		||||
	struct cmdq_shared	*shared = item->shared;
 | 
			
		||||
	struct window_pane	*wp = item->state.tflag.wp;
 | 
			
		||||
	struct winlink		*wl = item->state.tflag.wl;
 | 
			
		||||
	struct window		*w = wl->window;
 | 
			
		||||
@@ -60,12 +61,12 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	int			 x, y;
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'M')) {
 | 
			
		||||
		if (cmd_mouse_window(&item->mouse, &s) == NULL)
 | 
			
		||||
		if (cmd_mouse_window(&shared->mouse, &s) == NULL)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		if (c == NULL || c->session != s)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		c->tty.mouse_drag_update = cmd_resize_pane_mouse_update;
 | 
			
		||||
		cmd_resize_pane_mouse_update(c, &item->mouse);
 | 
			
		||||
		cmd_resize_pane_mouse_update(c, &shared->mouse);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	struct client		*c = item->state.c;
 | 
			
		||||
	struct window_pane	*wp = item->state.tflag.wp;
 | 
			
		||||
	struct session		*s = item->state.tflag.s;
 | 
			
		||||
	struct mouse_event	*m = &item->mouse;
 | 
			
		||||
	struct mouse_event	*m = &item->shared->mouse;
 | 
			
		||||
	struct utf8_data	*ud, *uc;
 | 
			
		||||
	wchar_t			 wc;
 | 
			
		||||
	int			 i, literal;
 | 
			
		||||
 
 | 
			
		||||
@@ -108,7 +108,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	if (c->session != NULL && c->session != s)
 | 
			
		||||
		c->last_session = c->session;
 | 
			
		||||
	c->session = s;
 | 
			
		||||
	if (!item->repeat)
 | 
			
		||||
	if (~item->shared->flags & CMDQ_SHARED_REPEAT)
 | 
			
		||||
		server_client_set_key_table(c, NULL);
 | 
			
		||||
	status_timer_start(c);
 | 
			
		||||
	session_update_activity(s, NULL);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								format.c
									
									
									
									
									
								
							@@ -574,10 +574,12 @@ format_create(struct cmdq_item *item, int tag, int flags)
 | 
			
		||||
	format_add(ft, "socket_path", "%s", socket_path);
 | 
			
		||||
	format_add_tv(ft, "start_time", &start_time);
 | 
			
		||||
 | 
			
		||||
	if (item != NULL && item->cmd != NULL)
 | 
			
		||||
	if (item != NULL) {
 | 
			
		||||
		if (item->cmd != NULL)
 | 
			
		||||
			format_add(ft, "command", "%s", item->cmd->entry->name);
 | 
			
		||||
	if (item != NULL && item->formats != NULL)
 | 
			
		||||
		format_merge(ft, item->formats);
 | 
			
		||||
		if (item->shared != NULL && item->shared->formats != NULL)
 | 
			
		||||
			format_merge(ft, item->shared->formats);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (ft);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -84,7 +84,7 @@ key_bindings_unref_table(struct key_table *table)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
key_bindings_add(const char *name, key_code key, int can_repeat,
 | 
			
		||||
key_bindings_add(const char *name, key_code key, int repeat,
 | 
			
		||||
    struct cmd_list *cmdlist)
 | 
			
		||||
{
 | 
			
		||||
	struct key_table	*table;
 | 
			
		||||
@@ -104,7 +104,8 @@ key_bindings_add(const char *name, key_code key, int can_repeat,
 | 
			
		||||
	bd->key = key;
 | 
			
		||||
	RB_INSERT(key_bindings, &table->key_bindings, bd);
 | 
			
		||||
 | 
			
		||||
	bd->can_repeat = can_repeat;
 | 
			
		||||
	if (repeat)
 | 
			
		||||
		bd->flags |= KEY_BINDING_REPEAT;
 | 
			
		||||
	bd->cmdlist = cmdlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -415,7 +416,8 @@ key_bindings_dispatch(struct key_binding *bd, struct client *c,
 | 
			
		||||
		cmdq_append(c, cmdq_get_callback(key_bindings_read_only, NULL));
 | 
			
		||||
	else {
 | 
			
		||||
		item = cmdq_get_command(bd->cmdlist, fs, m, 0);
 | 
			
		||||
		item->repeat = bd->can_repeat;
 | 
			
		||||
		if (bd->flags & KEY_BINDING_REPEAT)
 | 
			
		||||
			item->shared->flags |= CMDQ_SHARED_REPEAT;
 | 
			
		||||
		cmdq_append(c, item);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								notify.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								notify.c
									
									
									
									
									
								
							@@ -183,12 +183,12 @@ notify_session(const char *name, struct session *s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
notify_winlink(const char *name, struct session *s, struct winlink *wl)
 | 
			
		||||
notify_winlink(const char *name, struct winlink *wl)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_find_state	fs;
 | 
			
		||||
 | 
			
		||||
	cmd_find_from_winlink(&fs, s, wl);
 | 
			
		||||
	notify_add(name, &fs, NULL, s, wl->window, NULL);
 | 
			
		||||
	cmd_find_from_winlink(&fs, wl);
 | 
			
		||||
	notify_add(name, &fs, NULL, wl->session, wl->window, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -906,7 +906,8 @@ retry:
 | 
			
		||||
		 * non-repeating binding was found, stop repeating and try
 | 
			
		||||
		 * again in the root table.
 | 
			
		||||
		 */
 | 
			
		||||
		if ((c->flags & CLIENT_REPEAT) && !bd->can_repeat) {
 | 
			
		||||
		if ((c->flags & CLIENT_REPEAT) &&
 | 
			
		||||
		    (~bd->flags & KEY_BINDING_REPEAT)) {
 | 
			
		||||
			server_client_set_key_table(c, NULL);
 | 
			
		||||
			c->flags &= ~CLIENT_REPEAT;
 | 
			
		||||
			server_status_client(c);
 | 
			
		||||
@@ -924,7 +925,7 @@ retry:
 | 
			
		||||
		 * the client back to the root table.
 | 
			
		||||
		 */
 | 
			
		||||
		xtimeout = options_get_number(s->options, "repeat-time");
 | 
			
		||||
		if (xtimeout != 0 && bd->can_repeat) {
 | 
			
		||||
		if (xtimeout != 0 && (bd->flags & KEY_BINDING_REPEAT)) {
 | 
			
		||||
			c->flags |= CLIENT_REPEAT;
 | 
			
		||||
 | 
			
		||||
			tv.tv_sec = xtimeout / 1000;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								server.c
									
									
									
									
									
								
							@@ -175,8 +175,6 @@ server_start(struct event_base *base, int lockfd, char *lockfile)
 | 
			
		||||
 | 
			
		||||
	start_cfg();
 | 
			
		||||
 | 
			
		||||
	status_prompt_load_history();
 | 
			
		||||
 | 
			
		||||
	server_add_accept(0);
 | 
			
		||||
 | 
			
		||||
	proc_loop(server_proc, server_loop);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								tmux.h
									
									
									
									
									
								
							@@ -43,6 +43,7 @@ extern char   **environ;
 | 
			
		||||
struct args;
 | 
			
		||||
struct client;
 | 
			
		||||
struct cmdq_item;
 | 
			
		||||
struct cmdq_subitem;
 | 
			
		||||
struct cmdq_list;
 | 
			
		||||
struct environ;
 | 
			
		||||
struct input_ctx;
 | 
			
		||||
@@ -1208,6 +1209,19 @@ enum cmdq_type {
 | 
			
		||||
	CMDQ_CALLBACK,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Command queue item shared state. */
 | 
			
		||||
struct cmdq_shared {
 | 
			
		||||
	int			 references;
 | 
			
		||||
 | 
			
		||||
	int			 flags;
 | 
			
		||||
#define CMDQ_SHARED_REPEAT 0x1
 | 
			
		||||
 | 
			
		||||
	struct format_tree	*formats;
 | 
			
		||||
 | 
			
		||||
	struct mouse_event	 mouse;
 | 
			
		||||
	struct cmd_find_state	 current;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Command queue item. */
 | 
			
		||||
typedef enum cmd_retval (*cmdq_cb) (struct cmdq_item *, void *);
 | 
			
		||||
struct cmdq_item {
 | 
			
		||||
@@ -1223,25 +1237,20 @@ struct cmdq_item {
 | 
			
		||||
	u_int			 number;
 | 
			
		||||
	time_t			 time;
 | 
			
		||||
 | 
			
		||||
	struct format_tree	*formats;
 | 
			
		||||
 | 
			
		||||
	int			 flags;
 | 
			
		||||
#define CMDQ_FIRED 0x1
 | 
			
		||||
#define CMDQ_WAITING 0x2
 | 
			
		||||
#define CMDQ_NOHOOKS 0x4
 | 
			
		||||
 | 
			
		||||
	struct cmdq_shared	*shared;
 | 
			
		||||
	struct cmd_list		*cmdlist;
 | 
			
		||||
	struct cmd		*cmd;
 | 
			
		||||
	int			 repeat;
 | 
			
		||||
 | 
			
		||||
	cmdq_cb			 cb;
 | 
			
		||||
	void			*data;
 | 
			
		||||
 | 
			
		||||
	struct cmd_find_state	 current;
 | 
			
		||||
	struct cmd_state	 state;
 | 
			
		||||
 | 
			
		||||
	struct mouse_event	 mouse;
 | 
			
		||||
 | 
			
		||||
	TAILQ_ENTRY(cmdq_item)	 entry;
 | 
			
		||||
};
 | 
			
		||||
TAILQ_HEAD(cmdq_list, cmdq_item);
 | 
			
		||||
@@ -1398,7 +1407,9 @@ TAILQ_HEAD(clients, client);
 | 
			
		||||
struct key_binding {
 | 
			
		||||
	key_code		 key;
 | 
			
		||||
	struct cmd_list		*cmdlist;
 | 
			
		||||
	int			 can_repeat;
 | 
			
		||||
 | 
			
		||||
	int			 flags;
 | 
			
		||||
#define KEY_BINDING_REPEAT 0x1
 | 
			
		||||
 | 
			
		||||
	RB_ENTRY(key_binding)	 entry;
 | 
			
		||||
};
 | 
			
		||||
@@ -1556,7 +1567,7 @@ void printflike(4, 5) hooks_insert(struct hooks *, struct cmdq_item *,
 | 
			
		||||
void	notify_input(struct window_pane *, struct evbuffer *);
 | 
			
		||||
void	notify_client(const char *, struct client *);
 | 
			
		||||
void	notify_session(const char *, struct session *);
 | 
			
		||||
void	notify_winlink(const char *, struct session *, struct winlink *);
 | 
			
		||||
void	notify_winlink(const char *, struct winlink *);
 | 
			
		||||
void	notify_session_window(const char *, struct session *, struct window *);
 | 
			
		||||
void	notify_window(const char *, struct window *);
 | 
			
		||||
void	notify_pane(const char *, struct window_pane *);
 | 
			
		||||
@@ -1740,7 +1751,7 @@ void		 cmd_find_log_state(const char *, struct cmd_find_state *);
 | 
			
		||||
int		 cmd_find_from_session(struct cmd_find_state *,
 | 
			
		||||
		     struct session *);
 | 
			
		||||
int		 cmd_find_from_winlink(struct cmd_find_state *,
 | 
			
		||||
		     struct session *, struct winlink *);
 | 
			
		||||
		     struct winlink *);
 | 
			
		||||
int		 cmd_find_from_session_window(struct cmd_find_state *,
 | 
			
		||||
		     struct session *, struct window *);
 | 
			
		||||
int		 cmd_find_from_window(struct cmd_find_state *, struct window *);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user