如何让文本编辑器(或 Gtk 文本视图组件)尊重我的字体设置,以确保前导空格正确缩进?

如何让文本编辑器(或 Gtk 文本视图组件)尊重我的字体设置,以确保前导空格正确缩进?

在MATE桌面环境(Debian Linux 12)中,在类似富文本的组件中,根据不同的语言,渲染的前导空格的宽度似乎有所不同。包括文本视图普马/编辑器,阿比字, ETC。

我已经预先选择了字体(PT Mono Regular在本例中)和字体大小(14pt),但不同语言行的前导空格宽度可能不同:

第 1 部分:错误的压痕空间宽度

字体PT Mono Regular实际上定义了空格字符。这可以用命令检查FC 查询:

$ fc-query --format='%{charset}\n' /usr/share/fonts/truetype/paratype/PTM55F.ttf 
20-7e a0-109 10c-113 116-11f 122-127 12a-12b ...

码点范围20-7e显示字体包含空格字符\u0020

我猜想视图组件通过检查第一个非空格字符来确定用于渲染空白的字体,但不检查所选字体中定义的空格字符。如果是这样,我可以摆脱“AI空白字体”功能吗?也许有一些 libgtk 配置行?

当问题可以通过带有符号 char 的前缀行来解决时:

第 2 部分:在非前导空格时纠正空格宽度

因此,视图组件似乎“猜测”用于渲染空间的字体:仅检查空间之前的字符,而不检查空间之后的字符。唯一的例外规则是当空格位于行前(通常用于缩进)时,由于空格之前没有字母,编辑器会尝试通过搜索空格之后的字母来查找语言,而通常它会搜索空格之前的字母。空间。

但是,如果我使用制表符\u0009而不是空格字符\u0020对于缩进,制表符可以工作。一些文本编辑器喜欢原子只对待领导\u0020将空格分组为制表符。例如,您可以删除 4\u0020空格加一退格键击键输入原子或者VSCode

下面的屏幕截图显示了文本编辑器选择不同字体来渲染空间的样子:

第 3 部分:注意不同的空格字符宽度。

根据字体文件,只有第一行(英文)使用了定义在PTM55F.ttf文件。嗯,针对不同的语言渲染不同宽度的空格是合理的,因为空格位于文本的中间,空格宽度反映了语言的书写风格。

然而,前导空格通常用于缩进,默认情况下,它们的大小应根据用户选择的字体进行调整,以获得最期望的渲染结果。

其他字体也存在此问题。这似乎特别明显等宽字体家庭字体。

也许 fontconfig 可以解决这个问题?

示例文本文件

相关内容