tmux在焦点上调整大小

时间:2013-06-02 03:34:16

标签: unix terminal tmux

我希望能够为特定窗格指定辅助大小参数,以便在聚焦窗格时分配新大小,并在退出时返回它。所以例如

(注意[]表示聚焦的终端光标)

________________
|$ ls  |       |
|a's   |       |
|dir   |       |
|$     |$ []   |
|______|_______|

交换窗格焦点

_______________
|        |    |
|$ ls    |    |
|a's dir |    |
|$ []    |$   |
|________|____|

等等。特别是很酷,因为在最近的tmux版本中重新调整窗格,它可以很好地重新处理内容而不是将其切掉。

在该示例中,左窗格的宽度设置为在聚焦时自动切换为8列,并且在失去焦点时会变窄。请注意内容是如何仍然可见的(这是我们为什么喜欢tmux),但我们仍然可以通过让当前关注的窗格自动扩展自己来吃掉我们的蛋糕,因此它总是大到可以工作!

我可能会想出一些精心设计的绑定来自动执行resize-pane命令的应用,并使其适合我的愿望。但我希望有一些内置的功能。

跟踪并允许为每个窗格修改辅助的4元组整数是切实可行的。这些指定了该窗格聚焦时要执行的resize-pane -L/D/U/R操作量,以及该窗格散焦时的反方向。

可能还有其他更合理的表述。

2 个答案:

答案 0 :(得分:1)

找到部分解决方案...... 我已经将我的窗格切换与vim同步,因此每当我切换开关窗格时,我也会调整tmux的大小。

这不是最佳选择,因为tmux不会验证当前窗格大小并相应地调整其大小。无论如何,它可以很好地工作,因为您可以执行两次ctr-h或ctrl-k来调整窗格大小。

相关配置如下:

# Sync panes with vi
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-h) || tmux select-pane -L && tmux resize-pane -R 30"
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-l) || tmux select-pane -R && tmux resize-pane -L 30"
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-j) || tmux select-pane -D"
# Move panes up and down, wont resize
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-k) || tmux select-pane -U"

答案 1 :(得分:1)

很抱歉,到目前为止,这仅仅是猜测,但我想到了一些,我认为tmux内置的功能可以支持这一点,但它需要一些/大量的脚本。

看到我发布的这个问题。

http://sourceforge.net/p/tmux/mailman/message/31221459/

基本上看起来select-layout命令可以(可能!??!)用于将任意突变应用于布局。但是,我没有测试它是否有效。

Thomas Adam建议查看layout-custom.c源代码,以了解有关正在发生的事情的更多信息。这就是我的意思。但是,如果确实可以通过编程方式改变布局并生成工作字符串以传递给select-layout,那么这将是一个非常好的方法。

更新:现在我直接问过这个问题(是否只是生成一个合适的字符串确实可以实现调整大小到任意布局),但尚未收到来自Adam先生本人的回复,但原因是为什么我怀疑这可以工作,如果我们可以生成一个传递校验和的字符串是我能够以任何方式调整我的窗格,并在我记录字符串后更改它们(由list-windows命令产生) ,然后用字符串恢复到记录的布局。这意味着没有必要采取某种明确的行动来“保存”布局或任何东西,似乎校验和只是某种聪明的方式来帮助防止垃圾/病理字符串对字符串造成严重破坏执行窗格布局重新排列的解释器。

你肯定需要传递一个非常重要的字符串来构造才能使它工作。但是,在layout-custom.c中可以看到用于计算校验和及其余部分的代码。有一天,我可能会回来一个shell脚本(或只是一个C程序,如果可以解除代码),实现合适的转换。应该很有趣。

是的,我很高兴能把它拿出去拿起那个不错的小赏金,但不幸的是我今晚还有Real Work TM 等着我。