mirror of
https://github.com/tmux/tmux.git
synced 2025-09-03 06:17:04 +00:00
Merge branch 'obsd-master'
Conflicts: cmd-pipe-pane.c
This commit is contained in:
78
format.c
78
format.c
@ -39,7 +39,12 @@
|
||||
int format_replace(struct format_tree *, const char *, size_t, char **,
|
||||
size_t *, size_t *);
|
||||
char *format_get_command(struct window_pane *);
|
||||
void format_window_pane_tabs(struct format_tree *, struct window_pane *);
|
||||
|
||||
void format_defaults_pane_tabs(struct format_tree *, struct window_pane *);
|
||||
void format_defaults_session(struct format_tree *, struct session *);
|
||||
void format_defaults_client(struct format_tree *, struct client *);
|
||||
void format_defaults_winlink(struct format_tree *, struct session *,
|
||||
struct winlink *);
|
||||
|
||||
/* Entry in format tree. */
|
||||
struct format_entry {
|
||||
@ -322,6 +327,33 @@ fail:
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Expand keys in a template, passing through strftime first. */
|
||||
char *
|
||||
format_expand_time(struct format_tree *ft, const char *fmt, time_t t)
|
||||
{
|
||||
char *tmp, *expanded;
|
||||
size_t tmplen;
|
||||
struct tm *tm;
|
||||
|
||||
if (fmt == NULL)
|
||||
return (xstrdup(""));
|
||||
|
||||
tm = localtime(&t);
|
||||
|
||||
tmp = NULL;
|
||||
tmplen = strlen(fmt);
|
||||
|
||||
do {
|
||||
tmp = xreallocarray(tmp, 2, tmplen);
|
||||
tmplen *= 2;
|
||||
} while (strftime(tmp, tmplen, fmt, tm) == 0);
|
||||
|
||||
expanded = format_expand(ft, tmp);
|
||||
free(tmp);
|
||||
|
||||
return (expanded);
|
||||
}
|
||||
|
||||
/* Expand keys in a template. */
|
||||
char *
|
||||
format_expand(struct format_tree *ft, const char *fmt)
|
||||
@ -331,6 +363,9 @@ format_expand(struct format_tree *ft, const char *fmt)
|
||||
size_t off, len, n;
|
||||
int ch, brackets;
|
||||
|
||||
if (fmt == NULL)
|
||||
return (xstrdup(""));
|
||||
|
||||
len = 64;
|
||||
buf = xmalloc(len);
|
||||
off = 0;
|
||||
@ -419,9 +454,31 @@ format_get_command(struct window_pane *wp)
|
||||
return (out);
|
||||
}
|
||||
|
||||
/* Set defaults for any of arguments that are not NULL. */
|
||||
void
|
||||
format_defaults(struct format_tree *ft, struct client *c, struct session *s,
|
||||
struct winlink *wl, struct window_pane *wp)
|
||||
{
|
||||
if (s == NULL && c != NULL)
|
||||
s = c->session;
|
||||
if (wl == NULL && s != NULL)
|
||||
wl = s->curw;
|
||||
if (wp == NULL && wl != NULL)
|
||||
wp = wl->window->active;
|
||||
|
||||
if (c != NULL)
|
||||
format_defaults_client(ft, c);
|
||||
if (s != NULL)
|
||||
format_defaults_session(ft, s);
|
||||
if (s != NULL && wl != NULL)
|
||||
format_defaults_winlink(ft, s, wl);
|
||||
if (wp != NULL)
|
||||
format_defaults_pane(ft, wp);
|
||||
}
|
||||
|
||||
/* Set default format keys for a session. */
|
||||
void
|
||||
format_session(struct format_tree *ft, struct session *s)
|
||||
format_defaults_session(struct format_tree *ft, struct session *s)
|
||||
{
|
||||
struct session_group *sg;
|
||||
char *tim;
|
||||
@ -452,7 +509,7 @@ format_session(struct format_tree *ft, struct session *s)
|
||||
|
||||
/* Set default format keys for a client. */
|
||||
void
|
||||
format_client(struct format_tree *ft, struct client *c)
|
||||
format_defaults_client(struct format_tree *ft, struct client *c)
|
||||
{
|
||||
char *tim;
|
||||
time_t t;
|
||||
@ -502,7 +559,7 @@ format_client(struct format_tree *ft, struct client *c)
|
||||
|
||||
/* Set default format keys for a window. */
|
||||
void
|
||||
format_window(struct format_tree *ft, struct window *w)
|
||||
format_defaults_window(struct format_tree *ft, struct window *w)
|
||||
{
|
||||
char *layout;
|
||||
|
||||
@ -524,7 +581,8 @@ format_window(struct format_tree *ft, struct window *w)
|
||||
|
||||
/* Set default format keys for a winlink. */
|
||||
void
|
||||
format_winlink(struct format_tree *ft, struct session *s, struct winlink *wl)
|
||||
format_defaults_winlink(struct format_tree *ft, struct session *s,
|
||||
struct winlink *wl)
|
||||
{
|
||||
struct window *w = wl->window;
|
||||
char *flags;
|
||||
@ -534,7 +592,7 @@ format_winlink(struct format_tree *ft, struct session *s, struct winlink *wl)
|
||||
|
||||
flags = window_printable_flags(s, wl);
|
||||
|
||||
format_window(ft, w);
|
||||
format_defaults_window(ft, w);
|
||||
|
||||
format_add(ft, "window_index", "%d", wl->idx);
|
||||
format_add(ft, "window_flags", "%s", flags);
|
||||
@ -554,7 +612,7 @@ format_winlink(struct format_tree *ft, struct session *s, struct winlink *wl)
|
||||
|
||||
/* Add window pane tabs. */
|
||||
void
|
||||
format_window_pane_tabs(struct format_tree *ft, struct window_pane *wp)
|
||||
format_defaults_pane_tabs(struct format_tree *ft, struct window_pane *wp)
|
||||
{
|
||||
struct evbuffer *buffer;
|
||||
u_int i;
|
||||
@ -576,7 +634,7 @@ format_window_pane_tabs(struct format_tree *ft, struct window_pane *wp)
|
||||
|
||||
/* Set default format keys for a window pane. */
|
||||
void
|
||||
format_window_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
{
|
||||
struct grid *gd = wp->base.grid;
|
||||
struct grid_line *gl;
|
||||
@ -668,12 +726,12 @@ format_window_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
format_add(ft, "mouse_utf8_flag", "%d",
|
||||
!!(wp->base.mode & MODE_MOUSE_UTF8));
|
||||
|
||||
format_window_pane_tabs(ft, wp);
|
||||
format_defaults_pane_tabs(ft, wp);
|
||||
}
|
||||
|
||||
/* Set default format keys for paste buffer. */
|
||||
void
|
||||
format_paste_buffer(struct format_tree *ft, struct paste_buffer *pb,
|
||||
format_defaults_paste_buffer(struct format_tree *ft, struct paste_buffer *pb,
|
||||
int utf8flag)
|
||||
{
|
||||
char *s;
|
||||
|
Reference in New Issue
Block a user