summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel Polito <[email protected]>2026-01-08 22:26:17 -0300
committerFrank <[email protected]>2026-01-09 01:32:00 -0500
commit8b062ed6214ea83452a453428675a29d84105a79 (patch)
tree07c5d531f1da356b53fd248ff61d165cdf460c95
parentab97a95032182d0de8bb6dd151612b90e1ba2863 (diff)
downloadopencode-8b062ed6214ea83452a453428675a29d84105a79.tar.gz
opencode-8b062ed6214ea83452a453428675a29d84105a79.zip
feat(desktop): Change Terminal's Cursor to Bar and Stop Blinking when not focused (#7402)
-rw-r--r--packages/app/src/components/terminal.tsx16
1 files changed, 16 insertions, 0 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx
index 0faca0a23..770202f26 100644
--- a/packages/app/src/components/terminal.tsx
+++ b/packages/app/src/components/terminal.tsx
@@ -45,6 +45,8 @@ export const Terminal = (props: TerminalProps) => {
let serializeAddon: SerializeAddon
let fitAddon: FitAddon
let handleResize: () => void
+ let handleTextareaFocus: () => void
+ let handleTextareaBlur: () => void
let reconnect: number | undefined
let disposed = false
@@ -105,6 +107,7 @@ export const Terminal = (props: TerminalProps) => {
const t = new mod.Terminal({
cursorBlink: true,
+ cursorStyle: "bar",
fontSize: 14,
fontFamily: "IBM Plex Mono, monospace",
allowTransparency: true,
@@ -170,6 +173,17 @@ export const Terminal = (props: TerminalProps) => {
t.open(container)
container.addEventListener("pointerdown", handlePointerDown)
+
+ handleTextareaFocus = () => {
+ t.options.cursorBlink = true
+ }
+ handleTextareaBlur = () => {
+ t.options.cursorBlink = false
+ }
+
+ t.textarea?.addEventListener("focus", handleTextareaFocus)
+ t.textarea?.addEventListener("blur", handleTextareaBlur)
+
focusTerminal()
if (local.pty.buffer) {
@@ -242,6 +256,8 @@ export const Terminal = (props: TerminalProps) => {
window.removeEventListener("resize", handleResize)
}
container.removeEventListener("pointerdown", handlePointerDown)
+ term?.textarea?.removeEventListener("focus", handleTextareaFocus)
+ term?.textarea?.removeEventListener("blur", handleTextareaBlur)
const t = term
if (serializeAddon && props.onCleanup && t) {