从tmux 2.6开始,tmux现在允许每个窗格标题。它们可以通过tmux set -g pane-border-status top
启用。这在每个窗口运行10+窗格时非常方便。我还将标题格式设置如下,以便重新命名它们:
set -g pane-border-format "#{pane_index} #{pane_title}"
# rename prompt
bind . command-prompt -p "(rename-pane)" -I "#T" "select-pane -T '%%'"
我唯一不喜欢的是回退默认设置,默认为机器的主机名。相反,我倾向于以下几点:
pane_title
是由用户设置的,请使用它(#{pane_title}
)#{pane_current_path}
)。任何一种都是直截了当的:
tmux set -g pane-border-format "#{pane_index} #{pane_title}"
tmux set -g pane-border-format "#{pane_index} #{pane_current_path}"
tmux (https://github.com/tmux/tmux/wiki/Formats)的格式化部分显示,我可以使用三元条件检查来实现我想要的回退类型,但是在所有情况下我都很难让它工作,因为当pane_index
未设置时,似乎默认(我猜)生成窗格时返回的任何hostname
命令。以下是我目前的情况:
tmux set -g pane-border-format "#{pane_index} #{?#{!=:#{pane_title},$(hostname)},#{pane_title},#{pane_current_path}}"
这适用于用户显式重命名的窗格,也适用于以相同主机名生成的窗格。不幸的是,我的工作机器上的主机名随IP而变化,所以上面的命令看起来太脆弱了。更糟糕的是,由于某种原因,它只在直接从窗格运行时才能工作,而不是放在tmux配置中(当然,没有tmux前缀)。是否有更好的方法来确定pane_title是否未设置?
发布于 2020-01-29 06:32:45
您可以尝试使用钩子将新窗格的窗格标题设置为更容易识别的内容,例如:
set-hook -g after-split-window 'selectp -T ""'
set-hook -g after-new-window 'selectp -T ""'
set-hook -g after-new-session 'selectp -T ""'
然后查找空标题,而不是主机名:
#{?pane_title,#{pane_title},#{pane_current_command}}
发布于 2020-01-28 22:11:51
我不确定我是否能回答你所有的问题,但我可以尝试几个问题。
在我的配置中,我有一个monstrocity:
setw -g pane-border-format ' #{=/-20/…:pane_title} [#{=/-20/…:pane_current_command}] #(pgrep -P "#{pane_pid}" | tr "\n" " ")#{pane_current_path} #{?alternate_on,<Alt Mode> ,}'
(其中一些可能依赖tmux ~3.1特性)
使用setw -g
而不是set -g
可以使它从配置中为您工作。
正如你所看到的,我的方法就是把我想知道的一切都塞进去,因为如果你不使用它或者试图对空间吝啬的话,你就会浪费边框中的其余空间。终端很少比60 cols更小,所以我认为保持边框内容线紧凑是零值。使用低对比度的颜色是这里的关键,以保持一个或多或少干净的外观。因此,这解决了试图控制在该领域显示什么的尴尬之处:考虑不要试图控制显示和显示两者。
窗格标题的另一件事是,它“应该”由shell和/或正在运行的程序设置。这在去年十月给我带来了很大的头痛,虽然我知道我已经解决了这个问题。到目前为止,我的大脑和git日志都不能提供足够的信息来确定您需要做的正确的事情是控制pane_title的设置,但只需说这是需要触摸bash/zsh配置的复杂事情之一,而这可能是将其分配给主机名的原因,而不是一些更有用的东西,比如cwd或active命令行。
我相信我必须将:XT
字符串添加到我的终端重写中,以帮助它正常工作。请参阅https://unix.stackexchange.com/a/75382/12497
这对我来说是一条漫长的道路,这也很重要,因为到目前为止,pane_title是检查哪些程序可能在窗格中运行的唯一可靠的、直接的方法。自从我开始工作以来,我的上下文敏感的tmux键绑定(它是pane_title值的谓词)工作得非常完美:当zsh处于活动状态时,zsh将pane_title设置为运行的最后一个命令,当vim启动时,它会用我在vimrc中设置的特定字符串覆盖窗格标题,这样可以很好地控制上下文敏感的键绑定。之前存在的一个问题是,如果脚本"myscript“运行Vim,那么pane_title就变成了"myscript",这使得我的密钥绑定系统不可能知道我正在窗格中运行Vim。既然Vim被授权更新终端标题,并在tmux窗格中正确设置它,检查窗格是否运行vim的逻辑就大大简化了。
另一种检测窗格中运行的内容的方法是查询操作系统,查看进程是什么,因为我们确实可以访问PID。但到目前为止,我一直在避免为这类事情而疯狂地使用管道,而倾向于使用“标准”功能。我确信,如果pane_title最终击败了我,我将编写一个C++程序,在相关窗格中打印我正在运行的内容。祝好运。
https://unix.stackexchange.com/questions/564618
复制相似问题