fix: ignore CSI < and CSI = private parameter sequences#532
Conversation
Silently ignore unrecognized CSI sequences with < and = private parameter prefixes to prevent residual character output. 静默忽略未识别的带 < 和 = 私有参数前缀的 CSI 序列, 防止残留字符输出。 Log: 修复退出Claude Code时终端输出u字符的问题 PMS: BUG-356495 Influence: 修复后支持Kitty键盘协议的CSI <和CSI =序列,退出Claude Code等程序时不再有残留字符输出。
deepin pr auto review你好!我是CodeGeeX。我已仔细审查了你提供的 Git Diff。本次修改的主要目的是在终端模拟器 整体而言,修改思路清晰,目的明确。但为了提升代码的一致性、可读性和健壮性,我提出以下改进意见: 1. 代码质量与可读性问题:宏定义过长,且缺乏抽象 改进建议: // 新增宏定义,与 epp(), epe(), egt() 保持风格一致
#define elt( ) (p >= 3 && s[2] == '<')
#define eeq( ) (p >= 3 && s[2] == '=')
// 优化 eps(C) 宏,使用新宏替代冗长的逻辑判断
#define eps(C) (p >= 3 && !epp() && !epe() && !egt() && !elt() && !eeq() && cc < 256 && (charClass[cc] & (C)) == (C))2. 语法逻辑与一致性问题:处理逻辑的抽象层级不一致 改进建议: else if (egt())
processToken( TY_CSI_PG(cc), 0, 0); // spec. case for ESC]>0c or ESC]>c
else if (elt())
; // silently ignore CSI < sequences (e.g. Kitty keyboard pop)
else if (eeq())
; // silently ignore CSI = sequences
else if (cc == 'm' && argc - i >= 4 && (argv[i] == 38 || argv[i] == 48) && argv[i+1] == 2)3. 代码性能评价:性能无明显负面影响 4. 代码安全与健壮性问题:数组越界风险(潜在) 但是,我注意到原代码中存在一个隐患:宏 综合修改建议代码如果应用上述建议,你的 Diff 核心部分可以优化为如下形式: // 宏定义区域修改
#define epp( ) (p >= 3 && s[2] == '?')
#define epe( ) (p >= 3 && s[2] == '!')
#define egt( ) (p >= 3 && s[2] == '>')
#define elt( ) (p >= 3 && s[2] == '<') // 新增
#define eeq( ) (p >= 3 && s[2] == '=') // 新增
// 使用逻辑非操作符优化 eps 宏
#define eps(C) (p >= 3 && !epp() && !epe() && !egt() && !elt() && !eeq() && cc < 256 && (charClass[cc] & (C)) == (C))
// receiveChar 前置状态检查区域修改
if (lec(3,2,'?')) { return; }
if (lec(3,2,'>')) { return; }
if (lec(3,2,'!')) { return; }
if (lec(3,2,'<')) { return; }
if (lec(3,2,'=')) { return; }
// receiveChar 后续 CSI 处理区域修改
else if (egt())
processToken( TY_CSI_PG(cc), 0, 0); // spec. case for ESC]>0c or ESC]>c
else if (elt())
; // silently ignore CSI < sequences (e.g. Kitty keyboard pop)
else if (eeq())
; // silently ignore CSI = sequences
else if (cc == 'm' && argc - i >= 4 && (argv[i] == 38 || argv[i] == 48) && argv[i+1] == 2)这样的代码更符合该文件原有的设计模式,可维护性显著提高。希望这些建议对你有所帮助! |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: lzwind, wyu71 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Silently ignore unrecognized CSI sequences with < and = private parameter prefixes to prevent residual character output.
静默忽略未识别的带 < 和 = 私有参数前缀的 CSI 序列,
防止残留字符输出。
Log: 修复退出Claude Code时终端输出u字符的问题
PMS: BUG-356495
Influence: 修复后支持Kitty键盘协议的CSI <和CSI =序列,退出Claude Code等程序时不再有残留字符输出。