fix: 从xterm直接转发Escape按键
- 在xterm自定义键处理器中发送Vim Escape控制字符 - Radix弹框仅负责阻止Escape关闭窗口
This commit is contained in:
1 parent
d666840ed0
commit
57e51ba1cd
1 file changed
+8
-7
@@ -132,8 +132,12 @@ export function TerminalDialog({
|
||||
const ws = new WebSocket(wsUrl);
|
||||
wsRef.current = ws;
|
||||
|
||||
// Escape 由 Dialog 捕获后直接转发,xterm 跳过同一次事件以免重复发送。 // Logan.Li
|
||||
term.attachCustomKeyEventHandler((event) => event.key !== "Escape");
|
||||
// xterm 在目标元素阶段直接转发 Escape,避免 Radix 捕获层吞掉 Vim 控制字符。 // Logan.Li
|
||||
term.attachCustomKeyEventHandler((event) => {
|
||||
if (event.key !== "Escape") return true;
|
||||
if (event.type === "keydown") sendTerminalInput("\x1b");
|
||||
return false;
|
||||
});
|
||||
term.onData(sendTerminalInput);
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
@@ -221,11 +225,8 @@ export function TerminalDialog({
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent
|
||||
showCloseButton={false}
|
||||
// Radix 在捕获阶段收到 Escape,阻止关窗并把控制字符送给远端 Vim。 // Logan.Li
|
||||
onEscapeKeyDown={(event) => {
|
||||
event.preventDefault();
|
||||
sendTerminalInput("\x1b");
|
||||
}}
|
||||
// Escape 仅阻止弹框关闭,控制字符由 xterm 键处理器发送。 // Logan.Li
|
||||
onEscapeKeyDown={(event) => event.preventDefault()}
|
||||
className={cn(
|
||||
"min-w-0 overflow-hidden bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0",
|
||||
// 禁用 CSS 过渡:终端窗口应该即时缩放,不需要动画
|
||||
|
||||
Reference in new issue
Block a user