diff options
author | nicm <nicm> | 2017-02-03 11:57:27 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-02-03 11:57:27 +0000 |
commit | 7d23d019c0df197d724ced7fec21dc2047634c9b (patch) | |
tree | 7f07df20858bf10aef7db907bf4998b53fedd7db /format.c | |
parent | dd0c8147795c518de443c33895c614e52b42677f (diff) | |
download | rtmux-7d23d019c0df197d724ced7fec21dc2047634c9b.tar.gz rtmux-7d23d019c0df197d724ced7fec21dc2047634c9b.tar.bz2 rtmux-7d23d019c0df197d724ced7fec21dc2047634c9b.zip |
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.
Diffstat (limited to 'format.c')
-rw-r--r-- | format.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -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); |