urxvt - 强制列宽

urxvt - 强制列宽

我正在使用 urxvt 和平铺窗口管理器(很棒),并且希望我的终端保持 80 列,无论窗口大小如何。

所以我想知道是否有办法强制 urxvt 调整字体/间距大小以保持一定的列宽?

生成终端并urxvtc -g 80不能解决问题。我看过了,man 7 urxvt没有运气...

答案1

这似乎是两个问题:

  • 如何开始urxvt,让它自动选择合适的字体大小,前提是urxvt使用 80 列,
  • 如何urxvt在调整窗口大小时继续使用 80 列(并自动调整字体大小)。

X 应用程序可能对于给定的窗口大小,但是窗口管理器告诉应用程序将使用的大小。终端仿真器通常要求窗口大小为字体高度(行)和字体宽度(列)的倍数。这样做使得窗口管理器可以在调整窗口大小时进行合作(一点点......),并为窗口提供视觉反馈-和-布局。

urxvt使用 TrueType 字体时,它(原则上)可以使用任何缩放尺寸。当它打开字体时,它会从中获取字符单元格的高度和宽度。你可以使用相同的值和屏幕尺寸并计算所需的适当比例,以保持窗口宽度不超过 80 列。

但困难的部分是,如果窗口管理器不同意,它将更改该请求,可能会更改窗口的高度和宽度。任一维度都可以独立于另一个维度而增加或减少。在平铺窗口管理器中,您甚至不能假设允许缩小窗口以保持合适的宽高比。最终结果是urxvt获得窗口大小,然后必须决定如何将其分割成字符单元。

窗口管理器的初始布局更改通常由终端仿真器检测到,该仿真器将其作为窗口大小更改事件传递到(可能尚未启动)shellSIGWINCH

同样,启动后窗口大小调整将传递为SIGWINCH

鉴于此,你可以在 shell 中编写一个应用程序来捕获SIGWINCH并修改使用的字体大小urxvt(然后可能会要求窗口管理器提供更好的布局)。

这是可行的,但开箱即用,urxvt没有提供直接的方法来做到这一点。这需要一些脚本/编程:

扩展动态颜色控制序列以允许用户确定当前活动的颜色和字体。

这是指记录在该功能XTerm 控制序列:

如果一个“?”当给出而不是名称或 RGB 规范时,xterm 会回复相同形式的控制序列,该控制序列可用于设置相应的动态颜色。因为在一个控制序列中可以给出多于一对的颜色编号和规格,所以 xterm 可以做出多于一个的回复。

       Ps = 5 0  -> Set Font to Pt.

所以一个应用程序可以做

printf '\033]50;?\007'

并获取当前字体 — 无论如何最多 250 个字符(请参阅源代码

  • 进行适当的计算后,您的应用程序可以更新字体(相同的控制序列)。

奇怪的是,快速检查一下(Debian 7)的副本urxvt并没有工作为了测试脚本在xterm对于该功能。但是,如果该功能适合您,那么您就可以通过它来实现自动字体重新缩放。

相关内容