aboutsummaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authornicm <nicm>2017-02-03 11:57:27 +0000
committernicm <nicm>2017-02-03 11:57:27 +0000
commit7d23d019c0df197d724ced7fec21dc2047634c9b (patch)
tree7f07df20858bf10aef7db907bf4998b53fedd7db /format.c
parentdd0c8147795c518de443c33895c614e52b42677f (diff)
downloadrtmux-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.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/format.c b/format.c
index be03932b..d8118513 100644
--- a/format.c
+++ b/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);