Xubuntu 平铺:如何将终端窗口最大化以进行部分平铺?

我在Xubuntu 14.10中进行平铺终端时遇到了问题。这些终端仿真器(我已经测试过xfce4-terminal,xterm和gnome-terminal)只能通过它们使用的字体的宽度/高度来调整大小,因此无法以1像素为单位调整大小,参见图1。

Fig 1: Resizing Terminal Window

图1:当我将鼠标光标放在终端窗口右下角(光标不包括在图中),它们会显示当前窗口的大小。如果我将光标向右移动,终端窗口将以每次1个字符的大小扩展其宽度。

现在,当我进行全屏平铺(最大化窗口)时,终端窗口将拉伸其内容以覆盖整个屏幕,参见图2。

Fig 2: Maximize Terminal Window

图2:最大化终端窗口,你可以看到一行[ NORMAL > ... < 100% < 1:1 ]以空格结尾,其宽度比字体的宽度短。

但是当我进行部分平铺(例如,将窗口移动到左边缘进行左平铺,使其占据整个屏幕的左半部分),终端窗口不会像最大化时那样尝试拉伸,参见图3。

Fig 3: Left-tiling Terminal Window

图3:将终端窗口向左平铺,留出右侧平铺的网络浏览器和底部边缘的空间。

问题在于,如果我进行部分平铺,然后打开一个新的终端标签(ctrl+shift+t),终端窗口会在垂直方向上扩展其大小,这将导致一些行超出屏幕(图4)。这非常令人恼火。

Fig 4: Kicked Line of Tiling Terminal Window

图4:在打开新标签页后,左侧平铺终端的最后一行(:q!)被踢出屏幕。

这个问题在最大化窗口时不会发生(如图2所示)。

这个问题在Unity/Ubuntu 14.10中也不会发生。

所以我想知道是否可以部分最大化一个窗口(不仅限于终端)?或者是否有其他解决方法?(或者这只是一个bug,应该向问题跟踪器报告?)

2个回答

我在使用Xubuntu的默认终端仿真器和窗口管理器时遇到了同样的问题,几乎要疯掉了才试图修复它。我有一个部分答案,但很不幸,对于你来说并没有真正的解决办法。
正如你所提到的,在终端仿真器中(至少在我测试过的xterm和xfce4-terminal中),窗口大小是以字体大小而不是像素来处理的,这可能超出了人们的预期。根据X window system manpage的说法,这是可以接受的行为:“几何规范中的宽度和高度部分通常是以像素或字符为单位进行测量的,具体取决于应用程序。”
这就是为什么在进行部分平铺时终端窗口周围会有间隙:窗口管理器将窗口最大化在显示器的一半内,并使用字体大小的整数倍作为尺寸。也许有一种方法可以通过深入的xfwm或X配置调整来添加偏移量或修复此问题,但这超出了我的能力范围(我对Linux还是相当新手)。
当窗口最大化时占满整个屏幕区域的原因似乎与新安装的Xubuntu中默认设置有关。如果您打开Xfce4设置管理器,转到窗口管理器调整,然后点击辅助功能选项卡,会看到一个名为“最大化时隐藏窗口边框”的选项。当选中此选项时,最大化的终端窗口周围没有间隙;取消选中则有间隙。
不幸的是,这个选项只适用于最大化的窗口,而不适用于通过部分平铺将窗口“最大化”到屏幕的一半的情况。禁用该选项至少可以使两种情况下窗口周围的间隙保持一致。
至于标签栏将行推出屏幕的问题,再次平铺窗口以后打开一个新标签页将会将窗口底部带回视野。您还可以设置终端始终显示标签栏。这个选项在图形化偏好菜单中不可用;您需要编辑~/.config/xfce4/terminal/terminalrc并将MiscAlwaysShowTabs选项更改为TRUE。这样,在打开新标签页时窗口的大小就不会改变。
很抱歉我不能提供更多帮助。

我已经有一个解决办法了:tilda(https://github.com/lanoxx/tilda),不过还是谢谢你的努力。 - neizod
1没关系,我猜你可能已经解决了或者放弃了,因为你几个月前问过这个问题,但是我想把我的发现留在这里,以防有同样问题的人遇到这篇帖子。 - trvrfrd

你可以用xprop从任何终端窗口中删除WM_NORMAL_HINTS。

将这些行放在~/.bashrc文件中:

if [ "$DISPLAY" ]; then
 activ_win_id=`xprop -root _NET_ACTIVE_WINDOW`
 activ_win_id=$(echo $activ_win_id | awk '{ activ_win_id=substr($0,41,9); print activ_win_id; }' )
 xprop -id $activ_win_id -remove WM_NORMAL_HINTS
fi

提示将自动从当前终端窗口中移除。