diff --git a/ui-electrobun/src/mainview/Terminal.svelte b/ui-electrobun/src/mainview/Terminal.svelte index e84e547..72748bc 100644 --- a/ui-electrobun/src/mainview/Terminal.svelte +++ b/ui-electrobun/src/mainview/Terminal.svelte @@ -60,8 +60,30 @@ showPlaceholder: true, })); - term.open(termEl); - fitAddon.fit(); + // Defer open if container isn't visible yet (e.g., behind splash) + const tryOpen = () => { + try { + term.open(termEl); + fitAddon.fit(); + } catch (e) { + console.warn('[Terminal] open failed, retrying in 500ms:', (e as Error).message); + setTimeout(tryOpen, 500); + } + }; + if (termEl.offsetParent !== null) { + tryOpen(); + } else { + // Container not visible — wait for it + const observer = new IntersectionObserver((entries) => { + if (entries[0]?.isIntersecting) { + observer.disconnect(); + tryOpen(); + } + }); + observer.observe(termEl); + // Fallback: try after 2s regardless + setTimeout(() => { observer.disconnect(); tryOpen(); }, 2000); + } // ── Read cursor/scrollback settings ─────────────────────────────────