相当长一段时间以来,我一直在“挣扎”我希望在下面的图片中呈现的问题。
问题是我在终端模拟器中打开的程序周围有奇怪的边框。不过,基本上只有当我在 Vim 或类似程序中(我将该程序的背景设置为不透明时)才会注意到它。
所以如果我使用 mpv、ranger 等,你会看到同样的问题,但是很难注意到它,因为背景和 TE 的背景都是透明的,而如果我在 Vim 之类的东西中,我喜欢在工作时使用不透明的背景,至少可以说,看到这种差异很烦人。
我目前正在使用 Manjaro,虽然我过去使用 XFCE 作为 DE,但切换到 i3 作为 WM 看看是否有帮助。提示提示,没有。
我尝试了不同的方法来解决这个问题。我试过了:
- 正如您在下面的图片中看到的那样,我尝试过不同的终端模拟器。我目前正在使用 xfce-256color,但也尝试使用 urxvt 作为解决此问题的方法,但“没有运气”。
- 我也尝试过其他 TE。我尝试过:Kitty、Alacritty、xterm、dwm 等等,只要你能想到的,我都尝试过,但没有任何改变。所以我猜这不是TE。
- 我尝试使用“-u NONE -X”选项运行Vim,并立即将背景设置为colorscheme=darkblue,这样就可以很明显地看到边框是否仍然存在。
不幸的是,一切都是一样的。 - 我尝试过跑步:
urxvt -b 0
虽然这确实做了一些事情,但它使边框变得更薄(正如您在下面的第三组图片中看到的那样),它们仍然被保留。 - 我还在 i3 的配置中将边框设置为 0:for_window [class="^.*"] border Pixel 0,但同样的故事。
我想指出的是我不想让我的背景与我的 TE 颜色相同作为这个问题的“修复”。这本质上就是我对 Ranger、MPV 等隐式所做的事情。这也让我烦恼,但 Vim 是我花费最多时间的地方,我不想通过设置 Vim 的背景颜色来让它“不再是一个问题”透明,即
highlight Normal ctermbg=none
我尝试更改 xterm-256color 的字体大小。默认情况下,在上图中,它设置为:Source Code Pro Regular 9
我又拍了两张照片。
正如您所看到的,可见的“奇怪边界”部分的大小增加和减少,但它们仍然存在。
感谢您的阅读。
有关我的系统的一些信息(因为我不确定需要什么):
发行版:Manjaro
WM:i3
TE:xterm-256colors/urxvt
lspci -vnn | grep VGA
输出:
00:02.0 VGA 兼容控制器 [0300]:Intel Corporation 移动 4 系列芯片组集成图形控制器 [8086:2a42](修订版 07)(prog-if 00 [VGA 控制器])
我不确定需要什么,如果我需要提供任何其他信息,请通知我。
答案1
终端模拟器使用矩形字符单元格网格,每个单元格具有相同的大小。
您可能已经注意到,对于“常规”窗口管理器,大多数终端模拟器会突然跳跃调整大小,而不是平滑地逐像素调整大小。这是因为他们希望避免在右侧和底部边缘出现不可用的区域,从而为内部运行的应用程序提供令人愉悦的外观。
这是通过所谓的“几何提示”来实现的。假设您选择了一种字符单元为 10×20 像素的字体,并且终端仿真器还在整个终端仿真区域周围添加了 1px 边框。为了简单起见,我们假设没有选项卡栏,没有滚动条等。这意味着首选窗口宽度是 12, 22, 32, 42... 像素,首选窗口高度是 22, 42, 62, 82...像素。大多数终端模拟器都会安装几何提示,对于某些整数,它们的宽度应该是10*w+2
像素,高度应该是像素(显然,确切的数字总是根据实际单元格大小、首选边框宽度、滚动条宽度以及其他附加功能来计算)头脑)。20*h+2
w
h
正如名字所说,这些是提示,不是规则。窗口管理器可以按照自己的意愿尊重或忽略它们。典型的窗口管理器在最大化和全屏窗口时会忽略它们,但在其他情况下会尊重它们。我不熟悉平铺窗口管理器,但我认为他们总是忽略这些提示。平铺窗口管理器希望对窗口的移动位置进行更严格的控制,是窗口管理器告诉它,应用程序必须进行调整,而不是相反。
那么,如果窗口大小与提示不符,终端模拟器应该怎么做?您在右侧和底部留下了一些未使用的区域,没有被w*h
字符单元格的数量覆盖。你真的不能在那里做任何事情。 (嗯,有一些技巧。例如,VTE(由 GNOME 终端和其他终端使用)在滚动时使用底部的额外区域。Kitty 在单元格之间分配额外的空间,因此单元格的大小不完全相同。但通常该区域是无法使用。)
你在这里能做什么?
一种方法是确保没有这样的剩余区域,即您的窗口管理器尊重几何提示。我不知道 Manjaro 或 i3 是否以及如何让您做到这一点。
另一个是:在许多终端仿真器中,有一种方法可以动态(即运行时)更改默认背景颜色。这种默认背景颜色通常不仅用于w*h
字符单元格(其中没有明确设置背景颜色的单元格),还用于它们周围的边框,如果几何提示,则边框会变得更大不被尊重。
在支持终端模拟器中,使用 OSC 11 转义序列设置默认背景颜色(以及边框颜色),或使用 OSC 111 恢复为默认值,例如:
printf '\e]11;#abcdef\e\\'
printf '\e]111\e\\'
将它们与开始/退出vim
和朋友联系起来,将边框绘制为您在该上下文中喜欢的颜色。
答案2
我遇到了同样的问题,并且至少通过调整顶部面板的大小(KUbuntu)解决了底部部分最大化窗口的问题。