如何更改字体缩放进度

时间:2015-07-01 07:30:45

标签: fonts cygwin mintty

ctrl +/-在mintty终端上更改字体大小。

但是,某些地方的步骤非常大。我可以改变进度,以便更好地适应我的窗户吗?

1 个答案:

答案 0 :(得分:1)

简短回答:如果不修改源,就无法配置此行为。

引擎盖下

由于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函数可确保窗口大小适应以新字体大小为单位显示行和行。

请注意,sgn是一个返回数字符号的宏(表示为整数)。来自std.h

#define sgn(x) ({ typeof(x) x_ = (x); (x_ > 0) - (x_ < 0); })

config.c,我们可以看到初始字体大小取自FontHeight中配置的~/.minttyrc

{"FontHeight", OPT_INT, offcfg(font.size)},

字体大小外观

如何显示字体大小的差异取决于所选字体和字体渲染软件。

我附上了一个屏幕截图,显示了如何使用DirectWrite在Windows 7中以不同的字体大小显示Lucida Console和Consolas,DirectWrite是Windows 7发布的更新的字体渲染API,用于替换旧的GDI渲染引擎。

Fonts displayed at different font sizes

正如您所看到的,字体渲染大小的变化与指定的字体大小并不完全呈线性关系。我记得花时间选择一种能够以不同尺寸显示的字体,而Consolas(启用了ClearType)给了我最好的效果。