mirror of
https://github.com/tmux/tmux.git
synced 2025-09-01 20:57:00 +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