如何更改 mintty 中的字体缩放进度
How can I change font zoom progression in mintty
ctrl+/- 更改 mintty 终端上的字体大小。
不过有些地方的台阶还是比较大的。我可以更改进度以便更好地适应我的 window 吗?
简答:如果不修改源代码,就无法配置此行为。
引擎盖下
由于 mintty 是自由软件 (GPL),我从 mintty GitHub repository 查看了它的源代码。它是用 C 编写的,代码可读性很好(我是系统管理员,不是程序员),我在这里复制了一些相关代码。
您可以从 wininput.c
中的以下代码中看到,缩放以 1(增加字体大小)或 -1(减小)的离散步长添加到当前字体大小,并且没有配置设置用于控制步骤的大小。
// Font zooming
if (cfg.zoom_shortcuts && mods == MDK_CTRL) {
int zoom;
switch (key) {
when VK_OEM_PLUS or VK_ADD: zoom = 1;
when VK_OEM_MINUS or VK_SUBTRACT: zoom = -1;
when '0' or VK_NUMPAD0: zoom = 0;
otherwise: goto not_zoom;
}
win_zoom_font(zoom);
return 1;
not_zoom:;
}
相关函数定义在wintext.c
:
void
win_set_font_size(int size)
{
size = size ? sgn(font_size) * min(size, 72) : cfg.font.size;
if (size != font_size) {
win_init_fonts(size);
win_adapt_term_size();
}
}
void
win_zoom_font(int zoom)
{
win_set_font_size(zoom ? max(1, abs(font_size) + zoom) : 0);
}
win_adapt_term_size
函数确保window大小适应以新字体大小为单位显示行和行。
请注意,sgn
是一个宏,其中 returns 数字的符号(表示为整数)。来自 std.h
:
#define sgn(x) ({ typeof(x) x_ = (x); (x_ > 0) - (x_ < 0); })
从config.c
可以看出,初始字体大小取自~/.minttyrc
中配置的FontHeight
。
{"FontHeight", OPT_INT, offcfg(font.size)},
字体大小外观
字体大小的差异如何显示取决于所选字体和字体渲染软件。
我附上了一张截图,展示了 Lucida Console 和 Consolas 如何在 Windows 7 中使用 DirectWrite 以不同的字体大小显示,DirectWrite 是随 Windows 7 发布的较新的字体渲染 API替换旧的 GDI 渲染引擎。
如您所见,字体渲染大小的变化与指定的字体大小并不完全成线性比例。我记得我花时间选择了一种在不同尺寸下都能很好显示的字体,而 Consolas(启用了 ClearType)给了我最好的结果。
ctrl+/- 更改 mintty 终端上的字体大小。
不过有些地方的台阶还是比较大的。我可以更改进度以便更好地适应我的 window 吗?
简答:如果不修改源代码,就无法配置此行为。
引擎盖下
由于 mintty 是自由软件 (GPL),我从 mintty GitHub repository 查看了它的源代码。它是用 C 编写的,代码可读性很好(我是系统管理员,不是程序员),我在这里复制了一些相关代码。
您可以从 wininput.c
中的以下代码中看到,缩放以 1(增加字体大小)或 -1(减小)的离散步长添加到当前字体大小,并且没有配置设置用于控制步骤的大小。
// Font zooming
if (cfg.zoom_shortcuts && mods == MDK_CTRL) {
int zoom;
switch (key) {
when VK_OEM_PLUS or VK_ADD: zoom = 1;
when VK_OEM_MINUS or VK_SUBTRACT: zoom = -1;
when '0' or VK_NUMPAD0: zoom = 0;
otherwise: goto not_zoom;
}
win_zoom_font(zoom);
return 1;
not_zoom:;
}
相关函数定义在wintext.c
:
void
win_set_font_size(int size)
{
size = size ? sgn(font_size) * min(size, 72) : cfg.font.size;
if (size != font_size) {
win_init_fonts(size);
win_adapt_term_size();
}
}
void
win_zoom_font(int zoom)
{
win_set_font_size(zoom ? max(1, abs(font_size) + zoom) : 0);
}
win_adapt_term_size
函数确保window大小适应以新字体大小为单位显示行和行。
请注意,sgn
是一个宏,其中 returns 数字的符号(表示为整数)。来自 std.h
:
#define sgn(x) ({ typeof(x) x_ = (x); (x_ > 0) - (x_ < 0); })
从config.c
可以看出,初始字体大小取自~/.minttyrc
中配置的FontHeight
。
{"FontHeight", OPT_INT, offcfg(font.size)},
字体大小外观
字体大小的差异如何显示取决于所选字体和字体渲染软件。
我附上了一张截图,展示了 Lucida Console 和 Consolas 如何在 Windows 7 中使用 DirectWrite 以不同的字体大小显示,DirectWrite 是随 Windows 7 发布的较新的字体渲染 API替换旧的 GDI 渲染引擎。
如您所见,字体渲染大小的变化与指定的字体大小并不完全成线性比例。我记得我花时间选择了一种在不同尺寸下都能很好显示的字体,而 Consolas(启用了 ClearType)给了我最好的结果。