Pass prompts through status_replace so that they can be more helpful

(such as showing the previous session name when renaming). From Tiago
Cunha.
pull/1/head
Nicholas Marriott 2011-05-20 19:29:13 +00:00
parent 3ea5e06bfb
commit 1af2021de6
2 changed files with 21 additions and 5 deletions

View File

@ -82,7 +82,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx)
const char *prompts; const char *prompts;
struct cmd_command_prompt_cdata *cdata; struct cmd_command_prompt_cdata *cdata;
struct client *c; struct client *c;
char *prompt, *ptr; char *prompt, *prompt_replaced, *ptr;
size_t n; size_t n;
if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL) if ((c = cmd_find_client(ctx, args_get(args, 't'))) == NULL)
@ -116,8 +116,12 @@ cmd_command_prompt_exec(struct cmd *self, struct cmd_ctx *ctx)
ptr = strsep(&cdata->next_prompt, ","); ptr = strsep(&cdata->next_prompt, ",");
if (prompts == NULL) if (prompts == NULL)
prompt = xstrdup(ptr); prompt = xstrdup(ptr);
else else {
xasprintf(&prompt, "%s ", ptr); prompt_replaced = status_replace(c, NULL, NULL, NULL, ptr,
time(NULL), 0);
xasprintf(&prompt, "%s ", prompt_replaced);
xfree(prompt_replaced);
}
status_prompt_set(c, prompt, cmd_command_prompt_callback, status_prompt_set(c, prompt, cmd_command_prompt_callback,
cmd_command_prompt_free, cdata, 0); cmd_command_prompt_free, cdata, 0);
xfree(prompt); xfree(prompt);
@ -133,6 +137,7 @@ cmd_command_prompt_callback(void *data, const char *s)
struct cmd_list *cmdlist; struct cmd_list *cmdlist;
struct cmd_ctx ctx; struct cmd_ctx ctx;
char *cause, *newtempl, *prompt, *ptr; char *cause, *newtempl, *prompt, *ptr;
char *prompt_replaced;
if (s == NULL) if (s == NULL)
return (0); return (0);
@ -142,8 +147,12 @@ cmd_command_prompt_callback(void *data, const char *s)
cdata->template = newtempl; cdata->template = newtempl;
if ((ptr = strsep(&cdata->next_prompt, ",")) != NULL) { if ((ptr = strsep(&cdata->next_prompt, ",")) != NULL) {
xasprintf(&prompt, "%s ", ptr); prompt_replaced = status_replace(c, NULL, NULL, NULL, ptr,
time(NULL), 0);
xasprintf(&prompt, "%s ", prompt_replaced);
status_prompt_update(c, prompt); status_prompt_update(c, prompt);
xfree(prompt_replaced);
xfree(prompt); xfree(prompt);
cdata->idx++; cdata->idx++;
return (1); return (1);

9
tmux.1
View File

@ -1255,7 +1255,7 @@ The
.Ar shell-command .Ar shell-command
string may contain the special character sequences supported by the string may contain the special character sequences supported by the
.Ic status-left .Ic status-left
command. option.
If no If no
.Ar shell-command .Ar shell-command
is given, the current pipe (if any) is closed. is given, the current pipe (if any) is closed.
@ -2624,6 +2624,7 @@ Open the command prompt in a client.
This may be used from inside This may be used from inside
.Nm .Nm
to execute commands interactively. to execute commands interactively.
.Pp
If If
.Ar template .Ar template
is specified, it is used as the command. is specified, it is used as the command.
@ -2637,6 +2638,12 @@ a single prompt is displayed, constructed from
if it is present, or if it is present, or
.Ql \&: .Ql \&:
if not. if not.
The
.Ar prompts
may contain the special character sequences supported by the
.Ic status-left
option.
.Pp
Before the command is executed, the first occurrence of the string Before the command is executed, the first occurrence of the string
.Ql %% .Ql %%
and all occurrences of and all occurrences of