aboutsummaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2019-03-18 15:30:55 +0000
committerThomas Adam <thomas@xteddy.org>2019-03-18 15:30:55 +0000
commit4cbf596dc5828274b92d783aaa1da996fa481ca8 (patch)
tree25100d8aebd8d7e32b292579995c573b0754cc1d /format.c
parentacb2413852b98745b69459d0cdd0d9698cb75e2c (diff)
parent2628af573d98f7bdd4db02c7a80c860b867a45fb (diff)
downloadrtmux-4cbf596dc5828274b92d783aaa1da996fa481ca8.tar.gz
rtmux-4cbf596dc5828274b92d783aaa1da996fa481ca8.tar.bz2
rtmux-4cbf596dc5828274b92d783aaa1da996fa481ca8.zip
Merge branch 'obsd-master'
Diffstat (limited to 'format.c')
-rw-r--r--format.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/format.c b/format.c
index ea1372e7..0d1351ad 100644
--- a/format.c
+++ b/format.c
@@ -716,7 +716,9 @@ format_merge(struct format_tree *ft, struct format_tree *from)
struct format_tree *
format_create(struct client *c, struct cmdq_item *item, int tag, int flags)
{
- struct format_tree *ft;
+ struct format_tree *ft;
+ const struct window_mode **wm;
+ char tmp[64];
if (!event_initialized(&format_job_event)) {
evtimer_set(&format_job_event, format_job_timer, NULL);
@@ -743,6 +745,14 @@ format_create(struct client *c, struct cmdq_item *item, int tag, int flags)
format_add(ft, "socket_path", "%s", socket_path);
format_add_tv(ft, "start_time", &start_time);
+ for (wm = all_window_modes; *wm != NULL; wm++) {
+ if ((*wm)->default_format != NULL) {
+ xsnprintf(tmp, sizeof tmp, "%s_format", (*wm)->name);
+ tmp[strcspn(tmp, "-")] = '_';
+ format_add(ft, tmp, "%s", (*wm)->default_format);
+ }
+ }
+
if (item != NULL) {
if (item->cmd != NULL)
format_add(ft, "command", "%s", item->cmd->entry->name);
@@ -771,6 +781,30 @@ format_free(struct format_tree *ft)
free(ft);
}
+/* Walk each format. */
+void
+format_each(struct format_tree *ft, void (*cb)(const char *, const char *,
+ void *), void *arg)
+{
+ struct format_entry *fe;
+ static char s[64];
+
+ RB_FOREACH(fe, format_entry_tree, &ft->tree) {
+ if (fe->t != 0) {
+ xsnprintf(s, sizeof s, "%lld", (long long)fe->t);
+ cb(fe->key, fe->value, s);
+ } else {
+ if (fe->value == NULL && fe->cb != NULL) {
+ fe->cb(ft, fe);
+ if (fe->value == NULL)
+ fe->value = xstrdup("");
+ }
+ cb(fe->key, fe->value, arg);
+ }
+ }
+}
+
+
/* Add a key-value pair. */
void
format_add(struct format_tree *ft, const char *key, const char *fmt, ...)