我正在尝试编写一个脚本,该脚本将以编程方式设置tmux窗格的标题。通过使用以下命令,我基本上可以正常工作:
# tmux.conf
set -g pane-border-format "#{pane_index}:#{pane_title}"
# script
# ...
tmux select-pane -t foo:0.0 -T "this will be shortlived"
但是,只要我在该窗格中执行任何操作,就不会设置自定义标题。我查看了tmux的来源,但找不到任何掩饰的内容。 (该值似乎是我的$PS1
的一部分。)
所以,如何设置pane_title
,我有什么办法可以防止它覆盖我的自定义标题? (我很确定您可以使用shell函数在窗格边界格式字符串模板中填充值,但是如果通过脚本动态设置值,则这实际上不起作用。)
窗格标题的目的是让tmux内部的应用程序对其进行更新,除了配置每个应用程序不执行此操作或修改tmux本身之外,没有其他方法可以防止这种情况的发生。在这种情况下,是您的外壳对其进行更改。您可以检查外壳程序配置文件和系统外壳程序配置文件中的OSC标题设置顺序(\ 033] 2;或\ 033] 0;或\ e [2;或\ e [0;),但是其他程序仍然可以使用进行更改。
如果您想要不能由应用程序修改的自定义窗格标题,最好的选择是使用用户选项。如果您拥有tmux 3.0a或更高版本,则可以在脚本的窗格中进行设置:
[ -n "$TMUX" ] && tmux set -p @mytitle "foo"
然后以窗格边框格式使用它:
set -g pane-border-format "#{@mytitle}"
如果您有较旧的tmux,则没有窗格选项,但是可以通过使用以窗格ID命名的选项来实现,例如:
if [ -n "$TMUX" ]; then
I=$(tmux display -p '#{pane_id}')
tmux set -w "@mytitle_$I" "foo"
fi
然后:
set -g pane-border-format '#(tmux show -wv "@mytitle_#{pane_id}")'