summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components/terminal.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-06 10:02:31 -0600
committerGitHub <[email protected]>2026-02-06 10:02:31 -0600
commit2c58dd6203df7806f57ef6b29672091cb764e871 (patch)
tree10fca96d3098465b497f78e29de8d0a585c4dac3 /packages/app/src/components/terminal.tsx
parenta4bc883595df9ea0f752079519081bc602408553 (diff)
downloadopencode-2c58dd6203df7806f57ef6b29672091cb764e871.tar.gz
opencode-2c58dd6203df7806f57ef6b29672091cb764e871.zip
chore: refactoring and tests, splitting up files (#12495)
Diffstat (limited to 'packages/app/src/components/terminal.tsx')
-rw-r--r--packages/app/src/components/terminal.tsx23
1 files changed, 10 insertions, 13 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx
index 4d44d5f7e..2ee2e074e 100644
--- a/packages/app/src/components/terminal.tsx
+++ b/packages/app/src/components/terminal.tsx
@@ -8,6 +8,7 @@ import { LocalPTY } from "@/context/terminal"
import { resolveThemeVariant, useTheme, withAlpha, type HexColor } from "@opencode-ai/ui/theme"
import { useLanguage } from "@/context/language"
import { showToast } from "@opencode-ai/ui/toast"
+import { disposeIfDisposable, getHoveredLinkText, setOptionIfSupported } from "@/utils/runtime-adapters"
export interface TerminalProps extends ComponentProps<"div"> {
pty: LocalPTY
@@ -111,17 +112,13 @@ export const Terminal = (props: TerminalProps) => {
const colors = getTerminalColors()
setTerminalColors(colors)
if (!term) return
- const setOption = (term as unknown as { setOption?: (key: string, value: TerminalColors) => void }).setOption
- if (!setOption) return
- setOption("theme", colors)
+ setOptionIfSupported(term, "theme", colors)
})
createEffect(() => {
const font = monoFontFamily(settings.appearance.font())
if (!term) return
- const setOption = (term as unknown as { setOption?: (key: string, value: string) => void }).setOption
- if (!setOption) return
- setOption("fontFamily", font)
+ setOptionIfSupported(term, "fontFamily", font)
})
const focusTerminal = () => {
@@ -146,12 +143,12 @@ export const Terminal = (props: TerminalProps) => {
const t = term
if (!t) return
- const link = (t as unknown as { currentHoveredLink?: { text: string } }).currentHoveredLink
- if (!link?.text) return
+ const text = getHoveredLinkText(t)
+ if (!text) return
event.preventDefault()
event.stopImmediatePropagation()
- platform.openLink(link.text)
+ platform.openLink(text)
}
onMount(() => {
@@ -250,7 +247,7 @@ export const Terminal = (props: TerminalProps) => {
const fit = new mod.FitAddon()
const serializer = new SerializeAddon()
- cleanups.push(() => (fit as unknown as { dispose?: VoidFunction }).dispose?.())
+ cleanups.push(() => disposeIfDisposable(fit))
t.loadAddon(serializer)
t.loadAddon(fit)
fitAddon = fit
@@ -303,19 +300,19 @@ export const Terminal = (props: TerminalProps) => {
.catch(() => {})
}
})
- cleanups.push(() => (onResize as unknown as { dispose?: VoidFunction }).dispose?.())
+ cleanups.push(() => disposeIfDisposable(onResize))
const onData = t.onData((data) => {
if (socket.readyState === WebSocket.OPEN) {
socket.send(data)
}
})
- cleanups.push(() => (onData as unknown as { dispose?: VoidFunction }).dispose?.())
+ cleanups.push(() => disposeIfDisposable(onData))
const onKey = t.onKey((key) => {
if (key.key == "Enter") {
props.onSubmit?.()
}
})
- cleanups.push(() => (onKey as unknown as { dispose?: VoidFunction }).dispose?.())
+ cleanups.push(() => disposeIfDisposable(onKey))
// t.onScroll((ydisp) => {
// console.log("Scroll position:", ydisp)
// })