#1950·rio

Ctrl+Shift+字母会折叠为 Ctrl+字母; xterm modifyOtherKeys(ESC[>4;2m) 将被忽略

作者: cattyhouse创建于 2026年9月20日更新于 2026年9月20日
  1. 症状
  • 在 tmux 外部, cat -v 显示 Ctrl+FCtrl+Shift+F 都为 ^F。在 printf '\e[>4;2m' 后,仍然为 ^F^F。因此, xterm modifyOtherKeys 启用没有任何效果。
  • 在 tmux 外部,使用 Kitty 键盘协议的应用程序(例如, pi 发送 ESC[>7u) 可以正常工作: Ctrl+Shift+F 到达 ESC[102;6u
  • 在 tmux 内部, Ctrl+Shift+F 从未到达内部应用程序:在 extended-keys on, extended-keys-format csi-uterminal-features ",rio*:extkeys" 设置下, pane_key_mode 变为 Ext 2,但 cat -vESC[>4;2m 后仍然显示 ^[[102;5u^[[102;5u(均为 Ctrl+F)。同一个 tmux 设置中的 Ghostty 显示 ^[[102;5u 而不是 ^[[102;6u 并正常工作。
  • 实际影响: pi 记录搜索( ctrl+shift+f) 在 rio 外部 tmux 中和在 ghostty+tmux 中都可以正常工作,但在 rio+tmux 中却不能。
  1. 可能的原因
  • Rio 似乎实现了 Kitty 键盘处理(kitty_keyboard.rs),但忽略了 xterm modifyOtherKeys 启用/禁用序列(ESC[>4;1m,ESC[>4;2m,ESC[>4;0m)。
  • tmux 只在外部终端中使用 xterm 模式 2 请求扩展键(Eneks=\E[>4;2m,参见 tmux 3.5 变更: "始终从父终端请求模式 2");它从外部终端中从未发送 Kitty 推送(ESC[>...u)。它接受了外部终端发送的 CSI 27 ~CSI u
  • 因此, tmux 从来无法将 Rio 置于扩展模式: tmux 发送 >4;2m, Rio 忽略了它并继续发送传统的 0x06,tmux 将其转发为 Ctrl+F。Ghostty 之所以能正常工作,是因为它未经请求地发送了 CSI-u
  • 建议:在 Rio 中支持 xterm modifyOtherKeys 启用序列(至少是 >4;1m,>4;2m,>4;0m),或者文档说明 Rio 仅支持 Kitty,因此多路复用器如 tmux 无法通过 xterm 路径驱动它。