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

the*_*ott 16 terminal iterm fish tmux

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

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

我已经在以下位置设置了一个文件~/.config/fish/functions/fish_title.fish

function fish_title
  tmux display-message -p '#W'
end
Run Code Online (Sandbox Code Playgroud)

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

它更新,如果我使用类似pwdfish_title

function fish_title
  pwd
end
Run Code Online (Sandbox Code Playgroud)

关于如何fish_title动态获取 tmux 窗口名称的任何想法?

Kur*_*der 29

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

set-option -g set-titles on
set-option -g set-titles-string "#S / #W"
Run Code Online (Sandbox Code Playgroud)

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

但你真正的问题是,fish_title 函数发送的转义序列没有通过 tmux 传递。Tmux 而是使用该值来设置窗格标题。这在man tmux. 添加#Tset-titles-string以查看它实际上是通过您的fish_title函数设置为与窗口名称相同的值。