bash - 防止 tmux 的 pane_title 被更新
问题描述
我正在尝试编写一个脚本,它将以编程方式设置 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 的源代码,但找不到任何明显的答案。(该值似乎是 my 的一个片段$PS1
。)
那么,是如何pane_title
设置的,有什么方法可以防止它覆盖我的自定义标题?(我很确定您可以使用 shell 函数在窗格边框格式字符串模板中填充值,但如果这些值是通过脚本动态设置的,这实际上不起作用。)
解决方案
窗格标题的目的是让 tmux 内部的应用程序对其进行更新,除了将每个应用程序配置为不这样做或修改 tmux 本身之外,没有其他方法可以防止这种情况发生。在这种情况下,是你的 shell 改变了它。您可以检查您的 shell 配置文件和系统 shell 配置文件以了解 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}")'
推荐阅读
- php - X-Frame-Options 标头未设置:如何设置?
- python - 使用 Python 使用 Binance API 进行交易的问题
- swiftui - 在 SwiftUI 中,为什么 Spacer 会将文本推送到 TextEditor 框架之外?
- c++ - 为什么C语言中总是有main函数?
- c++ - 如何使用模板化别名或 const 变量来缩写静态 const 变量?
- javascript - 无法使用签名的网址成功上传到 Google Cloud
- makefile - ifndef 变量在定义变量时触发
- r - 如何提取 R 中交互作用的 beta 系数?
- flutter - 颤振:让用户使用特定的 qr 注册
- javascript - 如何在数组对象中查找元素并在 Javascript 中更新源数组