Hunter的大杂烩 技术学习笔记

2026-10-28

解决Pi/Cursor在herdr中backspace失效的问题

Filed under: 技术话题 — hunter @ 6:23 pm

from: grok的解决方案

Backspace 失效不是 herdr 的按键配置把这个键吃掉了,而是当前 SSH 会话里 Backspace 发出的是 0x08,herdr 只在开启了 Kitty 键盘协议的窗格里把它编成了 ▕
│ Ctrl+H。Cursor agent 和 Pi 会开这个协议,Claude 和 Codex 不开,所以只有前两个删不了字。 ▕
│ ▕
│ 这台机器上的情况与 herdr#5265 (https://github.com/herdrdev/herdr/issues/5265)(仍未关闭,0.9.4 的修复没盖住这种终端)一致: ▕
│ ▕
│ • herdr 是 0.9.5,~/.config/herdr/config.toml 里只有 onboarding = false,没有 Backspace 绑定。 ▕
│ • herdr 客户端挂在 /dev/pts/0,erase 是 ^?(0x7f)。这是 Linux pty 的默认值。 ▕
│ • 你是从 115.44.180.151 SSH 进来的。这类客户端(MobaXterm 是已确认的例子)无论本机 “Backspace sends Ctrl-H” 开没开,物理 Backspace 都发 0x08。 ▕
│ ▕
│ 0.9.4 的修复只在客户端 tty 的 VERASE == 0x08 时,才把 0x08 当成 Backspace。这里 VERASE 是 0x7f,这条修复不生效。于是 0x08 被当成 Ctrl+H。 ▕
│ ▕
│ 之后的差别只在各 agent 有没有向窗格推 Kitty 键盘协议: ▕
│ ▕
│

┌────────────────┬───────────────────────────────────────────┬────────────────────────┐ ▕
│ │ Agent │ 启动时写给终端的序列 │ 窗格里收到的 Backspace │ ▕
│ ├────────────────┼───────────────────────────────────────────┼────────────────────────┤ ▕
│ │ Cursor agent │ \x1b[>1u(只要消歧,flags=1) │ \x1b[104;5u,即 Ctrl+H │ ▕
│ ├────────────────┼───────────────────────────────────────────┼────────────────────────┤ ▕
│ │ Pi │ \x1b[>7u(消歧 + 事件 + 替代键,flags=7) │ 同样是 \x1b[104;5u │ ▕
│ ├────────────────┼───────────────────────────────────────────┼────────────────────────┤ ▕
│ │ Claude / Codex │ 不推这组 flags │ 仍是原始字节 0x08 │ ▕
│ └────────────────┴───────────────────────────────────────────┴────────────────────────┘ ▕
│ ▕
│ 104 是字母 h,修饰键 5 是 Ctrl。Pi 的输入框不把 Ctrl+H 当删除,所以 Backspace 像没按下去。Cursor agent 的解析器同样把它认成 Ctrl+H,而不是 Backspace。Claude ▕
│ 和 Codex 停在传统模式,0x08 仍被当成退格,所以正常。 ▕
│ ▕
│ herdr 装进 ~/.cursor/hooks.json、~/.pi/agent/extensions/herdr-agent-state.ts 的那些文件只上报 agent 状态,不处理键盘。 ▕
│ ▕
│ 临时处理:在启动 herdr 客户端的那个 SSH tty 上先执行 stty erase ^H,然后退出并重新运行 herdr(只 reload 配置不够,erase 只在客户端启动时读一次)。之后 0x08 ▕
│ 会按 Backspace 下发,Kitty 窗格里也会变成 0x7f。

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress