From fd1750af490f837405eb688ed82b3f8b18d29e26 Mon Sep 17 00:00:00 2001 From: nicm Date: Thu, 10 Oct 2013 11:56:50 +0000 Subject: [PATCH] Add automatic-rename-format option allowing automatic rename to use something other than pane_current_command. --- names.c | 58 +++++++++++++++++++++++---------------------------------- options-table.c | 5 +++++ 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/names.c b/names.c index 76dec82c..cfdaff83 100644 --- a/names.c +++ b/names.c @@ -22,12 +22,10 @@ #include #include #include -#include #include "tmux.h" void window_name_callback(unused int, unused short, void *); -char *parse_window_name(const char *); void queue_window_name(struct window *w) @@ -47,7 +45,7 @@ void window_name_callback(unused int fd, unused short events, void *data) { struct window *w = data; - char *name, *wname; + char *name; if (w->active == NULL) return; @@ -59,50 +57,40 @@ window_name_callback(unused int fd, unused short events, void *data) } queue_window_name(w); - if (w->active->screen != &w->active->base) - name = NULL; - else - name = get_proc_name(w->active->fd, w->active->tty); - if (name == NULL) - wname = default_window_name(w); - else { - /* - * If tmux is using the default command, it will be a login - * shell and argv[0] may have a - prefix. Remove this if it is - * present. Ick. - */ - if (w->active->cmd != NULL && *w->active->cmd == '\0' && - name != NULL && name[0] == '-' && name[1] != '\0') - wname = parse_window_name(name + 1); - else - wname = parse_window_name(name); - free(name); - } - - if (w->active->fd == -1) { - xasprintf(&name, "%s[dead]", wname); - free(wname); - wname = name; - } - - if (strcmp(wname, w->name)) { - window_set_name(w, wname); + name = format_window_name(w); + if (strcmp(name, w->name) != 0) { + window_set_name(w, name); server_status_window(w); } - free(wname); + free(name); } char * default_window_name(struct window *w) { - if (w->active->screen != &w->active->base) - return (xstrdup("[tmux]")); if (w->active->cmd != NULL && *w->active->cmd != '\0') return (parse_window_name(w->active->cmd)); return (parse_window_name(w->active->shell)); } char * +format_window_name(struct window *w) +{ + struct format_tree *ft; + char *fmt, *name; + + ft = format_create(); + format_window(ft, w); + format_window_pane(ft, w->active); + + fmt = options_get_string(&w->options, "automatic-rename-format"); + name = format_expand(ft, fmt); + + format_free(ft); + return (name); +} + +char * parse_window_name(const char *in) { char *copy, *name, *ptr; @@ -111,7 +99,7 @@ parse_window_name(const char *in) if (strncmp(name, "exec ", (sizeof "exec ") - 1) == 0) name = name + (sizeof "exec ") - 1; - while (*name == ' ') + while (*name == ' ' || *name == '-') name++; if ((ptr = strchr(name, ' ')) != NULL) *ptr = '\0'; diff --git a/options-table.c b/options-table.c index a62d38b2..22913854 100644 --- a/options-table.c +++ b/options-table.c @@ -482,6 +482,11 @@ const struct options_table_entry window_options_table[] = { .default_num = 1 }, + { .name = "automatic-rename-format", + .type = OPTIONS_TABLE_STRING, + .default_str = "#{?pane_in_mode,[tmux],#{pane_current_command}}#{?pane_dead,[dead],}" + }, + { .name = "c0-change-trigger", .type = OPTIONS_TABLE_NUMBER, .default_num = 250, -- 2.11.4.GIT