如何修改PuTTY源代码让功能键生成自定义按键码适配Color Maximite 2
修改PuTTY源码适配Color Maximite 2功能键需求
以下是具体的修改和编译步骤:
1. 获取PuTTY源码
下载PuTTY官方源码包(通过官方渠道获取最新稳定版),解压到本地工作目录。
2. 定位功能键处理代码
PuTTY处理终端按键输出的核心逻辑在terminal.c文件中。打开该文件,搜索TK_F1到TK_F12的宏定义,找到功能键对应的输出处理分支。
通常会看到类似这样的结构:
case TK_F1: if (term->keymap == KEYMAP_VT100) { send_escseq("OP"); } else if (term->keymap == KEYMAP_XTERM) { send_escseq("[11~"); } break;
3. 修改功能键输出为目标ASCII码
Color Maximite 2要求F1对应十进制145(十六进制0x91),F2对应146(0x92),以此类推直到F12对应156(0x9C)。
替换原有输出逻辑,改为直接发送单个目标字节:
case TK_F1: term_out_raw(term, "\x91", 1); break; case TK_F2: term_out_raw(term, "\x92", 1); break; case TK_F3: term_out_raw(term, "\x93", 1); break; case TK_F4: term_out_raw(term, "\x94", 1); break; case TK_F5: term_out_raw(term, "\x95", 1); break; case TK_F6: term_out_raw(term, "\x96", 1); break; case TK_F7: term_out_raw(term, "\x97", 1); break; case TK_F8: term_out_raw(term, "\x98", 1); break; case TK_F9: term_out_raw(term, "\x99", 1); break; case TK_F10: term_out_raw(term, "\x9A", 1); break; case TK_F11: term_out_raw(term, "\x9B", 1); break; case TK_F12: term_out_raw(term, "\x9C", 1); break;
如果需要保留其他场景的键码兼容性,也可以新增自定义键码模式分支(需在keymap.c中添加枚举值,再在terminal.c中判断该模式时执行上述逻辑),但仅针对串口连接场景的话,直接替换默认逻辑即可。
4. 编译修改后的PuTTY
以Debian/Ubuntu为例,先安装编译依赖:
sudo apt-get install gcc make libgtk2.0-dev libssl-dev
进入PuTTY源码目录,执行编译命令:
./configure make
编译完成后,当前目录会生成putty可执行文件。
5. 测试功能
运行编译后的PuTTY,配置串口连接/dev/ttyUSB0(波特率、数据位等参数匹配Color Maximite 2要求),连接后打开设备代码编辑器,按F1-F12键验证设备是否正常响应。
内容的提问来源于stack exchange,提问作者paxdiablo




