如何更改 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)给了我最好的结果。