如何使终端窗口标题与 tmux 窗口保持同步

如何使终端窗口标题与 tmux 窗口保持同步

我正在使用一个名为“Timing”的程序来跟踪我的时间。Timing 使用 iTerm 中当前窗口的名称进行分类。

我想将 iTerm 的当前标题设置为与当前活动的 tmux 窗口的名称匹配。

我已经在建立了一个文件,内容~/.config/fish/functions/fish_title.fish如下:

function fish_title
  tmux display-message -p '#W'
end

每当我打开新的终端窗口时,这都会成功将当前 Tmux 窗口标题输出到终端窗口。但是,如果我重命名 tmux 窗口或切换到新窗口,终端不会更新。

pwd如果我使用类似的东西它确实会更新fish_title

function fish_title
  pwd
end

关于如何fish_title动态获取 tmux 窗口名称有什么想法吗?

答案1

首先要指出的是,您可以通过 tmux 完全独立于 shell 执行此操作。将以下内容添加到您的 ~/.tmux.conf;例如:

set-option -g set-titles on
set-option -g set-titles-string "#S / #W"

此外,您需要确保 iTerm2 配置为允许程序通过转义序列设置标题。请参阅“终端可以设置选项卡/窗口标题”部分https://www.iterm2.com/documentation-one-page.html

但真正的问题是 fish_title 函数发送的转义序列没有通过 tmux。Tmux 反而使用值来设置窗格标题。虽然不太清楚,但在 的“名称和标题”部分对此进行了解释man tmux。添加#T到 以set-titles-string查看它实际上通过您的fish_title函数设置为与窗口名称相同的值。

相关内容