From a3cb1e2dcd5bc13520c29f61ca615cf5e140db96 Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Sat, 28 Nov 2020 00:53:12 -0600 Subject: [PATCH] Fix setting terminal title after `fg` The code to override the `(status current-command) was present`, but not handled in either the default `fish_title` function or the fallback. Closes #7444. --- share/functions/fish_title.fish | 4 +++- src/reader.cpp | 16 +++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/share/functions/fish_title.fish b/share/functions/fish_title.fish index 1555a7dc6..800f2d8f1 100644 --- a/share/functions/fish_title.fish +++ b/share/functions/fish_title.fish @@ -1,6 +1,8 @@ function fish_title # emacs' "term" is basically the only term that can't handle it. if not set -q INSIDE_EMACS; or string match -vq '*,term:*' -- $INSIDE_EMACS - echo (status current-command) (__fish_pwd) + # An override for the current command is passed as the first parameter. + # This is used by `fg` to show the true process name, among others. + echo (set -q argv[1] && echo $argv[1] || status current-command) (__fish_pwd) end end diff --git a/src/reader.cpp b/src/reader.cpp index 3abe07fd1..3130462c9 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -103,7 +103,6 @@ #define MODE_PROMPT_FUNCTION_NAME L"fish_mode_prompt" /// The default title for the reader. This is used by reader_readline. -#define DEFAULT_TITLE L"echo (status current-command) \" \" $PWD" /// The maximum number of characters to read from the keyboard without repainting. Note that this /// readahead will only occur if new characters are available for reading, fish will never block for @@ -1136,15 +1135,18 @@ void reader_write_title(const wcstring &cmd, parser_t &parser, bool reset_cursor scoped_push noninteractive{&parser.libdata().is_interactive, false}; scoped_push in_title(&parser.libdata().suppress_fish_trace, true); - wcstring fish_title_command = DEFAULT_TITLE; + wcstring fish_title_command = L"echo "; if (function_exists(L"fish_title", parser)) { fish_title_command = L"fish_title"; - if (!cmd.empty()) { - fish_title_command.append(L" "); - fish_title_command.append( - escape_string(cmd, ESCAPE_ALL | ESCAPE_NO_QUOTED | ESCAPE_NO_TILDE)); - } } + if (!cmd.empty()) { + fish_title_command.append(L" "); + fish_title_command.append( + escape_string(cmd, ESCAPE_ALL | ESCAPE_NO_QUOTED | ESCAPE_NO_TILDE)); + } else { + fish_title_command.append(L" (status current-command)"); + } + fish_title_command.append(L" $PWD"); wcstring_list_t lst; (void)exec_subshell(fish_title_command, parser, lst, false /* ignore exit status */);