☰
KiTTY 字体管理指南:Font settings 菜单、快捷键与 Ctrl+滚轮缩放实战
2026/10/14 5:24:42 网站建设 项目流程
  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

KiTTY 在主菜单中内置了Font settings(字体设置)功能,让终端用户可以在不进入配置对话框的前提下,随时放大/缩小字体、切换为负片颜色(negative colors)、以及在"黑底白字"与"白底黑字"两种配色间快速切换;同时支持按住Ctrl滚动鼠标滚轮直接缩放字号。本文以仓库中的官方文档 docs/pages/Fonts.md 为主体,结合kitty.c、windows/window.c等源码与kitty.ini配置模板,逐一讲解这些功能的入口、底层实现与自定义快捷键方法,读完后你可以在日常 SSH/串口会话中熟练运用这些实时显示调节手段。

Font settings:主菜单里的实时显示调节入口

在 KiTTY 的主菜单中提供了Font settings选项,官方文档对其用途概括为三点:

  • 增大 / 减小字体大小(increase/decrease font size);
  • 切换到负片颜色(switch to negative colors);
  • 在"黑底白字"与"白底黑字"终端之间切换(switch between black on white or white on black terminal)。

这些操作全部作用于当前活动会话,不需要关闭连接或重开配置窗口,非常适合在远程维护、演示、投影等需要临时调整显示效果的场景下使用。下图是文档中展示的菜单效果:

字体大小调整:ChangeFontSize 的源码实现

字号缩放的核心逻辑位于 kitty.c 中的ChangeFontSize()函数:

static int original_fontsize = -1 ; void ChangeFontSize(Terminal *term, Conf *conf,HWND hwnd, int dec) { FontSpec *fontspec = conf_get_fontspec(conf, CONF_font); if( original_fontsize<0 ) original_fontsize = fontspec->height ; if( dec == 0 ) { fontspec->height = original_fontsize ; } else { fontspec->height = fontspec->height + dec ; if(fontspec->height <=0 ) fontspec->height = 1 ; } conf_set_fontspec(conf, CONF_font, fontspec); fontspec_free(fontspec); force_reconf = 0 ; term_size(term, conf_get_int(conf, CONF_height), conf_get_int(conf, CONF_width), conf_get_int(conf, CONF_savelines)); ResetWindow(2); }

从实现上可以提炼出几个关键行为:

  1. 增量式调整:dec为1时字号+1,dec为-1时字号-1,即每次调整一个单位的字体高度(fontspec->height,对应配置中的字体点数)。
  2. 复位能力:dec == 0会把字号恢复为首次调整前记住的原始大小(original_fontsize)。该值在第一次调用时通过fontspec->height记录,此后一直保留,因此"放大后再复原"可以精确回到最初的字号。
  3. 下限保护:字号最小被钳制为1,不会出现height <= 0的非法值。
  4. 即时生效:修改后通过conf_set_fontspec写回配置,并调用term_size()重新计算终端行列数,最后ResetWindow(2)触发窗口重绘,无需重开会话。

与之对应的菜单命令处理位于 0.76b_My_PuTTY/windows/window.c:

case IDM_FONTUP: ChangeFontSize(term,conf,hwnd,1) ; break ; case IDM_FONTDOWN: ChangeFontSize(term,conf,hwnd,-1) ; break ;

即IDM_FONTUP放大、IDM_FONTDOWN缩小。

Ctrl+滚轮缩放:事件分发链路

除了菜单之外,文档明确指出:按住 Ctrl 滚动鼠标滚轮也可以调整字号。这条路径在WM_MOUSEWHEEL消息处理中实现,位于 0.76b_My_PuTTY/windows/window.c。

消息处理器首先用wheel_accumulator累积滚轮的增量值(Windows 以WHEEL_DELTA为单位,每格为 120),同时检测MK_CONTROL判断 Ctrl 是否按下:

if (message == WM_MOUSEWHEEL) { wheel_accumulator += (short)HIWORD(wParam); shift_pressed=LOWORD(wParam) & MK_SHIFT; control_pressed=LOWORD(wParam) & MK_CONTROL; }

当累积量达到阈值后,按方向把滚轮事件翻译为MBT_WHEEL_UP/MBT_WHEEL_DOWN,随后进入 KiTTY 专属分支(#ifdef MOD_PERSO区块):

} else if (control_pressed) { ChangeFontSize(term,conf,hwnd, MBT_WHEEL_UP == b ? 1 : -1); }

也就是说:

  • Ctrl + 滚轮向上:等价于IDM_FONTUP,字号 +1;
  • Ctrl + 滚轮向下:等价于IDM_FONTDOWN,字号 -1;
  • 未按 Ctrl 时滚轮仍保持原有的回滚/翻页语义(进入term_scroll滚动分支,并带有多倍增量平滑滚动逻辑)。

负片颜色与黑白反转的实现原理

NegativeColours:整盘反色

负片颜色由 kitty.c 中的NegativeColours()实现:

void NegativeColours(HWND hwnd) { int i ; #ifdef MOD_TUTTYCOLOR for (i = 0; i < 34; i++) { #else for (i = 0; i < 22; i++) { #endif conf_set_int_int(conf, CONF_colours, i*3+0, 256-conf_get_int_int(conf, CONF_colours, i*3+0)); conf_set_int_int(conf, CONF_colours, i*3+1, 256-conf_get_int_int(conf, CONF_colours, i*3+1)); conf_set_int_int(conf, CONF_colours, i*3+2, 256-conf_get_int_int(conf, CONF_colours, i*3+2)); } force_reconf = 0 ; PostMessage( hwnd, WM_COMMAND, IDM_RECONF, 0 ) ; RefreshBackground( hwnd ) ; }

它遍历终端配色表(CONF_colours),对每个颜色项的 RGB 三通道分别做256 - 原值的反色运算,然后触发IDM_RECONF重配置并刷新背景。默认遍历 22 个颜色槽位;在启用MOD_TUTTYCOLOR宏的构建中扩展到 34 个。由于该函数每次调用都会再次取反,因此它是可切换的——再执行一次即可恢复原配色。

BlackOnWhiteColours:黑白底互换(带原色记忆)

黑白互换由 kitty.c 中的BlackOnWhiteColours()实现,与负片不同,它不是简单取反,而是只调整前景/背景相关的 6 个颜色槽位,并且会先保存原始值以便恢复:

static int * BlackOnWhiteColoursSave = NULL ; void BlackOnWhiteColours(HWND hwnd) { if( BlackOnWhiteColoursSave==NULL ) { BlackOnWhiteColoursSave = (int*) malloc( 6*sizeof(int) ) ; BlackOnWhiteColoursSave[0]=conf_get_int_int(conf, CONF_colours, 0); conf_set_int_int(conf, CONF_colours, 0, 0); BlackOnWhiteColoursSave[1]=conf_get_int_int(conf, CONF_colours, 1); conf_set_int_int(conf, CONF_colours, 1, 0); BlackOnWhiteColoursSave[2]=conf_get_int_int(conf, CONF_colours, 2); conf_set_int_int(conf, CONF_colours, 2, 0); BlackOnWhiteColoursSave[3]=conf_get_int_int(conf, CONF_colours, 6); conf_set_int_int(conf, CONF_colours, 6, 255); BlackOnWhiteColoursSave[4]=conf_get_int_int(conf, CONF_colours, 7); conf_set_int_int(conf, CONF_colours, 7, 255); BlackOnWhiteColoursSave[5]=conf_get_int_int(conf, CONF_colours, 8); conf_set_int_int(conf, CONF_colours, 8, 255); } else { /* 第二次调用:若当前前景已是 0(黑色),则恢复为白底黑字或还原原始值 */ ... } force_reconf = 0 ; PostMessage( hwnd, WM_COMMAND, IDM_RECONF, 0 ) ; ResetWindow(2); }

其工作方式可以概括为:

  • 第一次调用:把默认前景色(槽位 0、1、2)置为0(黑色),把默认背景色(槽位 6、7、8)置为255(白色),实现"黑字白底";原 6 个颜色值被暂存到静态指针BlackOnWhiteColoursSave中。
  • 再次调用:检测当前前景是否为黑色,若是则直接切回"白字黑底",否则从保存区还原最初的配色,实现完整往返切换。

两个函数在菜单命令中分别绑定到IDM_FONTNEGATIVE与IDM_FONTBLACKANDWHITE(见 0.76b_My_PuTTY/windows/window.c)。

为字体操作绑定自定义快捷键

kitty.ini 的 [Shortcuts] 段

Font settings 相关的四类操作都可以通过kitty.ini配置文件的[Shortcuts]段绑定键盘快捷键,相关说明见 docs/pages/MenuShortcuts.md 与模板文件 kitty_ini.txt:

; Switch font to black on white colors ;fontblackandwhite= ; Decrease font size ;fontdown= ; Switch font to negative colors ;fontnegative= ; Increase font size ;fontup=

四个键的语义如下:

配置键触发动作对应菜单命令
fontup增大字体IDM_FONTUP
fontdown减小字体IDM_FONTDOWN
fontnegative切换负片颜色IDM_FONTNEGATIVE
fontblackandwhite黑底白字/白底黑字互换IDM_FONTBLACKANDWHITE

配置值为按键组合字符串,例如CONTROL+F12、SHIFT+F3等(可参考模板中其他条目的写法,如autocommand默认SHIFT+F12、command默认CONTROL+F5)。配置后重启 KiTTY 即可生效。

快捷键的读取与分发

源码层面的读取逻辑位于 kitty.c:程序启动时通过readINI(KittyIniFile, "Shortcuts", "fontup", ...)等调用读取四个键值,并用DefineShortcuts()解析为内部按键表示;读取失败时回退为默认值0(不绑定)。

按键分发则在 kitty.c 中完成——命中绑定的按键后,向窗口发送对应菜单命令:

else if( key == shortcuts_tab.fontup ) // Font up { SendMessage( hwnd, WM_COMMAND, IDM_FONTUP, 0 ) ; return 1 ; } else if( key == shortcuts_tab.fontdown ) // Font down { SendMessage( hwnd, WM_COMMAND, IDM_FONTDOWN, 0 ) ; return 1 ; } else if( key == shortcuts_tab.fontnegative ) // Font negative { SendMessage( hwnd, WM_COMMAND, IDM_FONTNEGATIVE, 0 ) ; return 1 ; } else if( key == shortcuts_tab.fontblackandwhite ) // Font black and white { SendMessage( hwnd, WM_COMMAND, IDM_FONTBLACKANDWHITE, 0 ) ; return 1 ; }

内置的小键盘快捷键

除可自定义的快捷键外,kitty.c 还内置了一组 Ctrl 组合键,无需配置即可使用:

  • Ctrl + 小键盘+(VK_ADD):发送IDM_FONTUP,放大字体;
  • Ctrl + 小键盘-(VK_SUBTRACT):发送IDM_FONTDOWN,缩小字体;
  • Ctrl + 小键盘0(VK_NUMPAD0):调用ChangeFontSize(term,conf,hwnd,0),把字号恢复为原始大小。

小结

KiTTY 的字体管理是一套"零成本"的显示调节方案:主菜单Font settings提供字号增减、负片反色、黑白底互换三项核心能力;按住Ctrl滚动滚轮即可就地缩放字号;kitty.ini的[Shortcuts]段与内置 Ctrl+小键盘组合键则提供了更快捷的触发方式。从源码看,这些功能分别由ChangeFontSize()、NegativeColours()与BlackOnWhiteColours()实现,字号支持精确复位、颜色切换支持往返还原,所有调整都即时写回配置并重绘窗口,不影响正在进行的 SSH 会话。

想要进一步了解其他菜单项对应的快捷键配置,可继续阅读 docs/pages/MenuShortcuts.md 与 kitty_ini.txt 中的完整[Shortcuts]段;菜单命令的完整处理逻辑可在 0.76b_My_PuTTY/windows/window.c 中继续追踪。

  • 通信
  • 网络

【免费下载链接】KiTTY

:computer: KiTTY, a free telnet/ssh client for Windows

项目地址:https://gitcode.com/gh_mirrors/kit/KiTTY
点击查看免费下载

相关推荐

上一篇:开源项目【Django Blog Zinnia】快速入门指南及常见问题解决方案
下一篇:Project-RainMan界面设计详解:从图标到动画的用户体验优化

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询