【问题标题】:tmux resize on focustmux 调整焦点大小
【发布时间】:2013-06-02 03:34:15
【问题描述】:

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

(注[]代表焦点终端光标)

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

交换窗格焦点

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

等等。特别是会很酷,因为在最近的 tmux 版本中调整窗格的大小可以很好地重新流动内容而不是切掉它。

在示例中,左侧窗格的宽度设置为在获得焦点时自动切换为 8 列,并且在失去焦点时变得更薄。注意内容仍然是可见的(这毕竟是我们喜欢 tmux 的原因),但我们仍然可以通过让当前聚焦的窗格自动扩展自身来吃蛋糕,因此它总是足够大以进行工作!

我可能会想出一些复杂的绑定来自动应用resize-pane 命令来执行此操作,并使其恰到好处地满足我的愿望。但我希望有某种内置功能。

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

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

【问题讨论】:

  • 您找到任何方法了吗?
  • 很遗憾,我做了更多的绑定以更快地调整大小,但现在有 8 个绑定来调整窗格大小并且没有“返回”行为,因此仍然需要大量手动工作。而且我还没有养成使用新绑定的习惯。所以没有。

标签: unix terminal tmux


【解决方案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"

【讨论】:

    【解决方案2】:

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

    查看我发布的这个问题。

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

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

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

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

    您肯定需要传递一个非平凡的构造字符串才能使其工作。但是,在layout-custom.c 中可以清楚地看到用于计算校验和的代码和其余部分。有一天,我可能会带着一个实现适当转换的 shell 脚本(或者只是一个 C 程序,如果可以提取代码的话)回来。应该很有趣。

    是的,如果我能完成这项工作并获得那笔不错的小赏金,那真是太棒了,但不幸的是,我今晚有真正的工作TM等着我。

    【讨论】:

    • 这仍然是一个很棒的答案,赏金是你的,谢谢你的信息!
    • 感谢@spurra 的鼓励!我还没有机会深入研究这个,但这是我在 tmux 中要搞砸的事情清单上的一个很高的位置。实际上,可能在该列表的顶部。我希望如果其他人沿着这条路走下去,他们可以对结果发表评论!!!
    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2013-06-19
    • 2020-07-14
    相关资源
    最近更新 更多