mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	The line number needs to be updated only after the \n is processed by
the parser, so store a flag and update it next time around. Also each new line needs its own shared data.
This commit is contained in:
		@@ -58,6 +58,7 @@ struct cmd_parse_state {
 | 
			
		||||
	size_t				 len;
 | 
			
		||||
	size_t				 off;
 | 
			
		||||
 | 
			
		||||
	int				 eol;
 | 
			
		||||
	int				 eof;
 | 
			
		||||
	struct cmd_parse_input		*input;
 | 
			
		||||
	u_int				 escapes;
 | 
			
		||||
@@ -933,6 +934,10 @@ yylex(void)
 | 
			
		||||
	char			*token, *cp;
 | 
			
		||||
	int			 ch, next;
 | 
			
		||||
 | 
			
		||||
	if (ps->eol)
 | 
			
		||||
		ps->input->line++;
 | 
			
		||||
	ps->eol = 0;
 | 
			
		||||
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		ch = yylex_getc();
 | 
			
		||||
 | 
			
		||||
@@ -959,7 +964,7 @@ yylex(void)
 | 
			
		||||
			/*
 | 
			
		||||
			 * End of line. Update the line number.
 | 
			
		||||
			 */
 | 
			
		||||
			ps->input->line++;
 | 
			
		||||
			ps->eol = 1;
 | 
			
		||||
			return ('\n');
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								cmd-queue.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								cmd-queue.c
									
									
									
									
									
								
							@@ -203,7 +203,10 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
 | 
			
		||||
	struct cmdq_item	*item, *first = NULL, *last = NULL;
 | 
			
		||||
	struct cmd		*cmd;
 | 
			
		||||
	struct cmdq_shared	*shared;
 | 
			
		||||
	u_int			 group = 0;
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
 | 
			
		||||
		if (cmd->group != group) {
 | 
			
		||||
			shared = xcalloc(1, sizeof *shared);
 | 
			
		||||
			if (current != NULL)
 | 
			
		||||
				cmd_find_copy_state(&shared->current, current);
 | 
			
		||||
@@ -211,8 +214,9 @@ cmdq_get_command(struct cmd_list *cmdlist, struct cmd_find_state *current,
 | 
			
		||||
				cmd_find_clear_state(&shared->current, 0);
 | 
			
		||||
			if (m != NULL)
 | 
			
		||||
				memcpy(&shared->mouse, m, sizeof shared->mouse);
 | 
			
		||||
			group = cmd->group;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
 | 
			
		||||
		item = xcalloc(1, sizeof *item);
 | 
			
		||||
		xasprintf(&item->name, "[%s/%p]", cmd->entry->name, item);
 | 
			
		||||
		item->type = CMDQ_COMMAND;
 | 
			
		||||
@@ -263,12 +267,20 @@ static enum cmd_retval
 | 
			
		||||
cmdq_fire_command(struct cmdq_item *item)
 | 
			
		||||
{
 | 
			
		||||
	struct client		*c = item->client;
 | 
			
		||||
	const char		*name = cmdq_name(c);
 | 
			
		||||
	struct cmdq_shared	*shared = item->shared;
 | 
			
		||||
	struct cmd		*cmd = item->cmd;
 | 
			
		||||
	const struct cmd_entry	*entry = cmd->entry;
 | 
			
		||||
	enum cmd_retval		 retval;
 | 
			
		||||
	struct cmd_find_state	*fsp, fs;
 | 
			
		||||
	int			 flags;
 | 
			
		||||
	char			*tmp;
 | 
			
		||||
 | 
			
		||||
	if (log_get_level() > 1) {
 | 
			
		||||
		tmp = cmd_print(cmd);
 | 
			
		||||
		log_debug("%s %s: (%u) %s", __func__, name, item->group, tmp);
 | 
			
		||||
		free(tmp);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	flags = !!(shared->flags & CMDQ_SHARED_CONTROL);
 | 
			
		||||
	cmdq_guard(item, "begin", flags);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user