mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Add a window or pane id "tag" to each format tree and use it to separate
jobs, this means that if the same job is used for different windows or panes (for example in pane-border-format), it will be run separately for each pane.
This commit is contained in:
		
							
								
								
									
										12
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								format.c
									
									
									
									
									
								
							@@ -77,6 +77,7 @@ static void	 format_defaults_winlink(struct format_tree *, struct session *,
 | 
			
		||||
 | 
			
		||||
/* Entry in format job tree. */
 | 
			
		||||
struct format_job {
 | 
			
		||||
	u_int			 tag;
 | 
			
		||||
	const char		*cmd;
 | 
			
		||||
	const char		*expanded;
 | 
			
		||||
 | 
			
		||||
@@ -99,6 +100,10 @@ RB_GENERATE_STATIC(format_job_tree, format_job, entry, format_job_cmp);
 | 
			
		||||
static int
 | 
			
		||||
format_job_cmp(struct format_job *fj1, struct format_job *fj2)
 | 
			
		||||
{
 | 
			
		||||
	if (fj1->tag < fj2->tag)
 | 
			
		||||
		return (-1);
 | 
			
		||||
	if (fj1->tag > fj2->tag)
 | 
			
		||||
		return (1);
 | 
			
		||||
	return (strcmp(fj1->cmd, fj2->cmd));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -123,6 +128,7 @@ struct format_tree {
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
 | 
			
		||||
	u_int			 tag;
 | 
			
		||||
	int			 flags;
 | 
			
		||||
 | 
			
		||||
	RB_HEAD(format_entry_tree, format_entry) tree;
 | 
			
		||||
@@ -238,9 +244,11 @@ format_job_get(struct format_tree *ft, const char *cmd)
 | 
			
		||||
	char			*expanded;
 | 
			
		||||
	int			 force;
 | 
			
		||||
 | 
			
		||||
	fj0.tag = ft->tag;
 | 
			
		||||
	fj0.cmd = cmd;
 | 
			
		||||
	if ((fj = RB_FIND(format_job_tree, &format_jobs, &fj0)) == NULL) {
 | 
			
		||||
		fj = xcalloc(1, sizeof *fj);
 | 
			
		||||
		fj->tag = ft->tag;
 | 
			
		||||
		fj->cmd = xstrdup(cmd);
 | 
			
		||||
		fj->expanded = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -497,7 +505,7 @@ format_merge(struct format_tree *ft, struct format_tree *from)
 | 
			
		||||
 | 
			
		||||
/* Create a new tree. */
 | 
			
		||||
struct format_tree *
 | 
			
		||||
format_create(struct cmdq_item *item, int flags)
 | 
			
		||||
format_create(struct cmdq_item *item, int tag, int flags)
 | 
			
		||||
{
 | 
			
		||||
	struct format_tree	*ft;
 | 
			
		||||
 | 
			
		||||
@@ -508,6 +516,8 @@ format_create(struct cmdq_item *item, int flags)
 | 
			
		||||
 | 
			
		||||
	ft = xcalloc(1, sizeof *ft);
 | 
			
		||||
	RB_INIT(&ft->tree);
 | 
			
		||||
 | 
			
		||||
	ft->tag = tag;
 | 
			
		||||
	ft->flags = flags;
 | 
			
		||||
 | 
			
		||||
	format_add_cb(ft, "host", format_cb_host);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user