Merge branch 'obsd-master'

Conflicts:
	cmd-pipe-pane.c
This commit is contained in:
Thomas Adam
2015-02-06 19:05:56 +00:00
35 changed files with 308 additions and 267 deletions

View File

@ -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;