feat(wrapper): disable ghost text when using arrow keys

This commit is contained in:
verse91
2026-04-19 12:44:33 +07:00
parent edab802026
commit ff8874fefc
+17 -5
View File
@@ -201,8 +201,10 @@ func runWrapper() {
var renderTimer *time.Timer var renderTimer *time.Timer
var renderMu sync.Mutex var renderMu sync.Mutex
disableGhostText := false
// renderOverlay decides whether to draw the suggestion menu based on current state // renderOverlay decides whether to draw the suggestion menu based on current state
renderOverlay := func() { renderOverlay := func(disableGhost bool) {
renderMu.Lock() renderMu.Lock()
defer renderMu.Unlock() defer renderMu.Unlock()
@@ -238,14 +240,16 @@ func runWrapper() {
b.WriteString(overlay.Clear()) b.WriteString(overlay.Clear())
} }
overlay.UpdateItems(results) overlay.UpdateItems(results)
b.WriteString(overlay.RenderGhostText(bufCopy)) if !disableGhost {
b.WriteString(overlay.RenderGhostText(bufCopy))
}
b.WriteString(overlay.Render()) b.WriteString(overlay.Render())
} }
os.Stdout.Write([]byte(b.String())) os.Stdout.Write([]byte(b.String()))
}) })
} }
renderOverlay() renderOverlay(disableGhostText)
// reads from stdin and decides what to forward or intercept // reads from stdin and decides what to forward or intercept
// for most cases, I just handle the already have terminal shortcuts // for most cases, I just handle the already have terminal shortcuts
@@ -294,7 +298,9 @@ func runWrapper() {
} }
} }
var rBuf strings.Builder var rBuf strings.Builder
rBuf.WriteString(overlay.RenderGhostText(naiveBuffer)) if !disableGhostText {
rBuf.WriteString(overlay.RenderGhostText(naiveBuffer))
}
rBuf.WriteString(overlay.Render()) rBuf.WriteString(overlay.Render())
os.Stdout.Write([]byte(rBuf.String())) os.Stdout.Write([]byte(rBuf.String()))
i += 2 i += 2
@@ -316,6 +322,10 @@ func runWrapper() {
} }
// forward escape sequence to pty if not intercepted // forward escape sequence to pty if not intercepted
os.Stdout.Write([]byte(overlay.ClearAndDisable()))
disableGhostText = true
naiveBuffer = ""
ptmx.Write([]byte{b}) ptmx.Write([]byte{b})
// skip remaining bytes of the escape sequence to avoid misinterpretation // skip remaining bytes of the escape sequence to avoid misinterpretation
for j := i + 1; j < n; j++ { for j := i + 1; j < n; j++ {
@@ -347,6 +357,7 @@ func runWrapper() {
os.Stdout.Write([]byte(overlay.ClearAndDisable())) os.Stdout.Write([]byte(overlay.ClearAndDisable()))
ptmx.Write([]byte{0x0d}) ptmx.Write([]byte{0x0d})
naiveBuffer = "" naiveBuffer = ""
disableGhostText = false
shouldOverlayDraw = false shouldOverlayDraw = false
continue continue
} else if b == 0x09 { // tab: select suggestions } else if b == 0x09 { // tab: select suggestions
@@ -392,6 +403,7 @@ func runWrapper() {
shouldOverlayDraw = true shouldOverlayDraw = true
case '\r', 0x03, 0x15, 0x0C: // enter, ctrl+c, ctrl+u, ctrl+l: clear buffer on line reset case '\r', 0x03, 0x15, 0x0C: // enter, ctrl+c, ctrl+u, ctrl+l: clear buffer on line reset
naiveBuffer = "" naiveBuffer = ""
disableGhostText = false
os.Stdout.Write([]byte(overlay.ClearAndDisable())) os.Stdout.Write([]byte(overlay.ClearAndDisable()))
default: default:
// track normal printable characters in the buffer for matching // track normal printable characters in the buffer for matching
@@ -414,7 +426,7 @@ func runWrapper() {
} }
} }
if shouldOverlayDraw { if shouldOverlayDraw {
renderOverlay() renderOverlay(disableGhostText)
} }
} }
} }