0

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

4

1 回答 1

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了绑定,但这没有用,好像它重复它只会回到你开始的地方。

于 2018-07-08T14:13:36.173 回答