feat: 支持 3 列终端面板布局 - 修复多面板焦点冲突问题
This commit is contained in:
@@ -194,8 +194,9 @@ function TerminalPanel({ initialCwd, connectDelay = 0, autoFocus = false }: { in
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="grid grid-cols-2 grid-rows-1 gap-1 h-screen w-screen bg-[#1e1e1e]">
|
||||
<div className="grid grid-cols-3 grid-rows-1 gap-1 h-screen w-screen bg-[#1e1e1e]">
|
||||
<TerminalPanel initialCwd={DEFAULT_CWD} connectDelay={0} autoFocus={true} />
|
||||
<TerminalPanel initialCwd={DEFAULT_CWD} connectDelay={100} />
|
||||
<TerminalPanel initialCwd={DEFAULT_CWD} connectDelay={200} />
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -945,13 +945,13 @@ const TerminalViewport = React.forwardRef<TerminalController, TerminalViewportPr
|
||||
setTerminalCursorBlink(false);
|
||||
};
|
||||
|
||||
const handleDocumentFocusIn = (event: FocusEvent) => {
|
||||
const handleContainerFocusIn = (event: FocusEvent) => {
|
||||
const target = event.target as Node | null;
|
||||
if (target && container.contains(target)) {
|
||||
setTerminalCursorBlink(true);
|
||||
return;
|
||||
} else {
|
||||
setTerminalCursorBlink(false);
|
||||
}
|
||||
setTerminalCursorBlink(false);
|
||||
};
|
||||
|
||||
const handleWindowBlur = () => {
|
||||
@@ -1070,7 +1070,7 @@ const TerminalViewport = React.forwardRef<TerminalController, TerminalViewportPr
|
||||
|
||||
void initialize();
|
||||
|
||||
document.addEventListener('focusin', handleDocumentFocusIn, true);
|
||||
container.addEventListener('focusin', handleContainerFocusIn, true);
|
||||
window.addEventListener('blur', handleWindowBlur);
|
||||
|
||||
return () => {
|
||||
@@ -1078,7 +1078,7 @@ const TerminalViewport = React.forwardRef<TerminalController, TerminalViewportPr
|
||||
touchScrollCleanupRef.current?.();
|
||||
touchScrollCleanupRef.current = null;
|
||||
|
||||
document.removeEventListener('focusin', handleDocumentFocusIn, true);
|
||||
container.removeEventListener('focusin', handleContainerFocusIn, true);
|
||||
window.removeEventListener('blur', handleWindowBlur);
|
||||
|
||||
localDisposables.forEach((disposable) => disposable.dispose());
|
||||
|
||||
Reference in New Issue
Block a user