Add some additional format helper functions.

This commit is contained in:
Nicholas Marriott 2020-04-27 14:33:17 +01:00
parent e62db55713
commit c30e765c7b
3 changed files with 52 additions and 11 deletions

View File

@ -2472,25 +2472,59 @@ format_single(struct cmdq_item *item, const char *fmt, struct client *c,
struct format_tree *ft; struct format_tree *ft;
char *expanded; char *expanded;
if (item != NULL) ft = format_create_defaults(item, c, s, wl, wp);
ft = format_create(cmdq_get_client(item), item, FORMAT_NONE, 0);
else
ft = format_create(NULL, item, FORMAT_NONE, 0);
format_defaults(ft, c, s, wl, wp);
expanded = format_expand(ft, fmt); expanded = format_expand(ft, fmt);
format_free(ft); format_free(ft);
return (expanded); return (expanded);
} }
/* Expand a single string using state. */
char *
format_single_from_state(struct cmdq_item *item, const char *fmt,
struct client *c, struct cmd_find_state *fs)
{
return (format_single(item, fmt, c, fs->s, fs->wl, fs->wp));
}
/* Expand a single string using target. */ /* Expand a single string using target. */
char * char *
format_single_from_target(struct cmdq_item *item, const char *fmt) format_single_from_target(struct cmdq_item *item, const char *fmt)
{ {
struct cmd_find_state *target = cmdq_get_target(item);
struct client *tc = cmdq_get_target_client(item); struct client *tc = cmdq_get_target_client(item);
return (format_single(item, fmt, tc, target->s, target->wl, target->wp)); return (format_single_from_state(item, fmt, tc, cmdq_get_target(item)));
}
/* Create and add defaults. */
struct format_tree *
format_create_defaults(struct cmdq_item *item, struct client *c,
struct session *s, struct winlink *wl, struct window_pane *wp)
{
struct format_tree *ft;
if (item != NULL)
ft = format_create(cmdq_get_client(item), item, FORMAT_NONE, 0);
else
ft = format_create(NULL, item, FORMAT_NONE, 0);
format_defaults(ft, c, s, wl, wp);
return (ft);
}
/* Create and add defaults using state. */
struct format_tree *
format_create_from_state(struct cmdq_item *item, struct client *c,
struct cmd_find_state *fs)
{
return (format_create_defaults(item, c, fs->s, fs->wl, fs->wp));
}
/* Create and add defaults using target. */
struct format_tree *
format_create_from_target(struct cmdq_item *item)
{
struct client *tc = cmdq_get_target_client(item);
return (format_create_from_state(item, tc, cmdq_get_target(item)));
} }
/* Set defaults for any of arguments that are not NULL. */ /* Set defaults for any of arguments that are not NULL. */

4
menu.c
View File

@ -73,7 +73,7 @@ menu_add_item(struct menu *menu, const struct menu_item *item,
return; return;
if (fs != NULL) if (fs != NULL)
s = format_single(qitem, item->name, c, fs->s, fs->wl, fs->wp); s = format_single_from_state(qitem, item->name, c, fs);
else else
s = format_single(qitem, item->name, c, NULL, NULL, NULL); s = format_single(qitem, item->name, c, NULL, NULL, NULL);
if (*s == '\0') { /* no item if empty after format expanded */ if (*s == '\0') { /* no item if empty after format expanded */
@ -91,7 +91,7 @@ menu_add_item(struct menu *menu, const struct menu_item *item,
cmd = item->command; cmd = item->command;
if (cmd != NULL) { if (cmd != NULL) {
if (fs != NULL) if (fs != NULL)
s = format_single(qitem, cmd, c, fs->s, fs->wl, fs->wp); s = format_single_from_state(qitem, cmd, c, fs);
else else
s = format_single(qitem, cmd, c, NULL, NULL, NULL); s = format_single(qitem, cmd, c, NULL, NULL, NULL);
} else } else

7
tmux.h
View File

@ -1827,7 +1827,14 @@ char *format_expand(struct format_tree *, const char *);
char *format_single(struct cmdq_item *, const char *, char *format_single(struct cmdq_item *, const char *,
struct client *, struct session *, struct winlink *, struct client *, struct session *, struct winlink *,
struct window_pane *); struct window_pane *);
char *format_single_from_state(struct cmdq_item *, const char *,
struct client *, struct cmd_find_state *);
char *format_single_from_target(struct cmdq_item *, const char *); char *format_single_from_target(struct cmdq_item *, const char *);
struct format_tree *format_create_defaults(struct cmdq_item *, struct client *,
struct session *, struct winlink *, struct window_pane *);
struct format_tree *format_create_from_state(struct cmdq_item *,
struct client *, struct cmd_find_state *);
struct format_tree *format_create_from_target(struct cmdq_item *);
void format_defaults(struct format_tree *, struct client *, void format_defaults(struct format_tree *, struct client *,
struct session *, struct winlink *, struct window_pane *); struct session *, struct winlink *, struct window_pane *);
void format_defaults_window(struct format_tree *, struct window *); void format_defaults_window(struct format_tree *, struct window *);