version 1.119, 2017/02/01 09:55:07 |
version 1.120, 2017/02/03 11:57:27 |
|
|
|
|
/* Entry in format job tree. */ |
/* Entry in format job tree. */ |
struct format_job { |
struct format_job { |
|
u_int tag; |
const char *cmd; |
const char *cmd; |
const char *expanded; |
const char *expanded; |
|
|
|
|
static int |
static int |
format_job_cmp(struct format_job *fj1, struct format_job *fj2) |
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)); |
return (strcmp(fj1->cmd, fj2->cmd)); |
} |
} |
|
|
|
|
struct session *s; |
struct session *s; |
struct window_pane *wp; |
struct window_pane *wp; |
|
|
|
u_int tag; |
int flags; |
int flags; |
|
|
RB_HEAD(format_entry_tree, format_entry) tree; |
RB_HEAD(format_entry_tree, format_entry) tree; |
|
|
char *expanded; |
char *expanded; |
int force; |
int force; |
|
|
|
fj0.tag = ft->tag; |
fj0.cmd = cmd; |
fj0.cmd = cmd; |
if ((fj = RB_FIND(format_job_tree, &format_jobs, &fj0)) == NULL) { |
if ((fj = RB_FIND(format_job_tree, &format_jobs, &fj0)) == NULL) { |
fj = xcalloc(1, sizeof *fj); |
fj = xcalloc(1, sizeof *fj); |
|
fj->tag = ft->tag; |
fj->cmd = xstrdup(cmd); |
fj->cmd = xstrdup(cmd); |
fj->expanded = NULL; |
fj->expanded = NULL; |
|
|
|
|
|
|
/* Create a new tree. */ |
/* Create a new tree. */ |
struct format_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; |
struct format_tree *ft; |
|
|
|
|
|
|
ft = xcalloc(1, sizeof *ft); |
ft = xcalloc(1, sizeof *ft); |
RB_INIT(&ft->tree); |
RB_INIT(&ft->tree); |
|
|
|
ft->tag = tag; |
ft->flags = flags; |
ft->flags = flags; |
|
|
format_add_cb(ft, "host", format_cb_host); |
format_add_cb(ft, "host", format_cb_host); |