问题描述
在gnome桌面系统中,terminal软件在全屏情况下,tmux或vim等此类程序启动后可能会在窗口底部出现一个丑陋的空白行(空白空间)。空间浪费不说,还影响美观,影响心情(逼死强迫症)。问题如图:


红框所在的那条白边就是本博文要处理的问题。
原因分析
一句话省流版:
窗口剩余空间不足以容纳下一行具体分析如下:
你的屏幕纵向分辨率被设置为Y,在terminal程序全屏的情况下(无内嵌工具栏,状态栏等),从上到下有:zui上面的top bar(panel)[P],terminal的title bar(标题栏)[T],文字显示区[S],Window List显示区(插件)[W]S = Y-P-T-W
当然上面只是理论,实际上不需要这么去计算。
在xterm里面输入:echo -e "\e[14t" ,会显示出下面的图片,

这表明我当前系统的文本显示区纵向一共1095个像素。
上面的命令是一条CSI扩展,我不确定您使用的terminal应用程序是否支持,。
然后您需要获取当前使用字体的像素级高度,也就是找到“显示每一行需要多少像素”。
同样在xterm也有CSI扩展支持:echo -e "\e[16t" ,输出图片如下:

我现在配置的字体(hack-regular)和字号(13)并且在使用xft进行字体渲染的情况下,每一行高度是:22像素高,10像素宽。
接下来就简单了,小学数学计算余数。
1095 % 22 = 17
也就是说1095不能被22整除,余数是17。要想被整除的话:1,增加5;2,减少17。
再看一遍这个公式:S = Y-P-T-W,
Y一般是固定不变的(再去换个不舒服的分辨率得不偿失)
那就在P、T 和 W上做文章,我选择在改P。
将top bar(也就是panel)的高度减少5个像素。这5个像素加给S(1095+5=1100,1100 % 22 = 0)
修改方法
读取当前top bar的高度:
首先要知道top bar(panel)的高度,gnome 48里面默认是32,可以通过looking glass(也叫lg,不是那个虚拟机啊,开启方法:alt+f2,输入lg,回车)来读取,图片如下修改top bar的高度:
32-5=27,将panel的高度设置为27。(我原本想在lg里面直接设置这个值,发现不能成功,写不进去。原因未知,知道的朋友请在下面留言,先行感谢!)
我还是选择在gnome的extensions里面找能修改这个值的工具,找到的是:Just Perfection,配置图如下:

并且每次启动都能自动设置好,什么时候不想要了,把插件关闭或者卸载就好了,简单安全。
效果展示
下面是修改好以后的效果图:那条丑陋的空白空间或者空白行已经不见了。
另一种方法:
您如果想要修改title bar的高度也可以,但我们有找到太合适的工具。因为xterm还是X11系统的软件,和现在主流wayland原生软件的设置方式区别还挺大的。
下面内容请自行判断是否可行。
使用xprop命令列出当前xterm窗口的信息(要点击一下当前窗口)

红圈里面的37就是title bar(标题栏)的高度,把它改成32就可以了。命令如下:(记得也要点一下)
xprop -frame -format _MUTTER_FRAME_EXTENTS 32c -set _MUTTER_FRAME_EXTENTS "0, 0, 32, 0"
缺点是:每次都得手工改(写启动脚本也可以)
优点是:1.不需要修改全局top bar的高度,2不影响其他应用程序的title bar 高度。
另外,两种方法只用1种就可以了,两种都用的话就又有5个像素的空白空间了,哈哈哈

后注:
改Window List高度的方法我没有试,这个应该也不难,改下插件的CSS文件应该就可以,但我不太想让window list窗口太矮,毕竟使用非常频繁,不像top bar(panel),基本只是看看。调试过程中使用过的命令:
tty与terminal(xterm)相关命令:
stty sizeecho -ne "\e[14t"
echo -ne "\e[14;2t"
echo -ne "\e[15t"
echo -ne "\e[16t"
window相关命令:
xdpyinfoxdpyinfo | grep resolution
xwininfo
wmctrl -lG
xrdb -merge
xrdb -remove
xrdb -query
xprop
xprop -frame -format _MUTTER_FRAME_EXTENTS 32c -set _MUTTER_FRAME_EXTENTS "0, 0, 32, 0"
字体相关命令:
fc-matchfc-list
ftdump
ttfdump
pango-view