Tmux:不允许切换到特定窗格

时间:2018-07-08 06:59:45

标签: tmux tmuxinator

我想从使用ctrl+b arrow-keys选中的窗格中删除一个窗格。这是因为我有一个使用tmux clock-mode -t 2显示时间的窗格,并且我永远都不想切换到该窗格。

1 个答案:

答案 0 :(得分:0)

此解决方案与我在姊妹站点unix.stackexchange上回答的问题类似,但并不完美。

tmux在每个窗格上都有一个标志,说明它是否处于某种模式。例如,时钟模式下的窗格的display -p #{pane_in_mode}打印1。 不幸的是,您无法区分例如复制模式和时钟模式。但是,如果一次不可能有多个窗格 ,则可以编写一个小的Shell脚本来拦截相应的绑定,并测试最终的移动是否最终落入了模式。如果是这样,脚本将重复该移动,可能会移动到下一个窗口。

在PATH中创建以下文件mytmux并使其可执行(chmod +x mytmux):

#!/bin/bash
# https://stackoverflow.com/a/51232832/5008284
noclock(){
        tmux "$@"
        inmode=$(tmux display -p '#{pane_in_mode}')
        [ "$inmode" = 1 ] && tmux "$@"
        exit 0
}
case $1 in
-noclock)shift
        : ${1?select-pane cmd and args}
        noclock "$@" ;;
esac

然后在~/.tmux.conf中设置以下绑定:

bind-key    -T prefix o     run-shell 'mytmux -noclock select-pane -t :.+'
bind-key    -T prefix l     run-shell 'mytmux -noclock select-pane -l'
bind-key -r -T prefix Up    run-shell 'mytmux -noclock select-pane -U'
bind-key -r -T prefix Down  run-shell 'mytmux -noclock select-pane -D'
bind-key -r -T prefix Left  run-shell 'mytmux -noclock select-pane -L'
bind-key -r -T prefix Right run-shell 'mytmux -noclock select-pane -R'

例如,如果要处理多个会话,则需要扩展它。我将select-pane -l放在了绑定中,但这没有用,就好像它重复了一样,只会回到您的起点。