perf(tui): optimistically echo simple input
This commit is contained in:
@@ -10,11 +10,12 @@ import { isActionMod, isMac, isMacActionFallback } from '../lib/platform.js'
|
|||||||
type InkExt = typeof Ink & {
|
type InkExt = typeof Ink & {
|
||||||
stringWidth: (s: string) => number
|
stringWidth: (s: string) => number
|
||||||
useDeclaredCursor: (a: { line: number; column: number; active: boolean }) => (el: any) => void
|
useDeclaredCursor: (a: { line: number; column: number; active: boolean }) => (el: any) => void
|
||||||
|
useStdout: () => { stdout?: NodeJS.WriteStream }
|
||||||
useTerminalFocus: () => boolean
|
useTerminalFocus: () => boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const ink = Ink as unknown as InkExt
|
const ink = Ink as unknown as InkExt
|
||||||
const { Box, Text, useStdin, useInput, stringWidth, useDeclaredCursor, useTerminalFocus } = ink
|
const { Box, Text, useStdin, useInput, useStdout, stringWidth, useDeclaredCursor, useTerminalFocus } = ink
|
||||||
|
|
||||||
const ESC = '\x1b'
|
const ESC = '\x1b'
|
||||||
const INV = `${ESC}[7m`
|
const INV = `${ESC}[7m`
|
||||||
@@ -293,6 +294,7 @@ export function TextInput({
|
|||||||
const [sel, setSel] = useState<null | { end: number; start: number }>(null)
|
const [sel, setSel] = useState<null | { end: number; start: number }>(null)
|
||||||
const fwdDel = useFwdDelete(focus)
|
const fwdDel = useFwdDelete(focus)
|
||||||
const termFocus = useTerminalFocus()
|
const termFocus = useTerminalFocus()
|
||||||
|
const { stdout } = useStdout()
|
||||||
|
|
||||||
const curRef = useRef(cur)
|
const curRef = useRef(cur)
|
||||||
const selRef = useRef<null | { end: number; start: number }>(null)
|
const selRef = useRef<null | { end: number; start: number }>(null)
|
||||||
@@ -787,6 +789,7 @@ export function TextInput({
|
|||||||
!selected &&
|
!selected &&
|
||||||
!mask &&
|
!mask &&
|
||||||
!placeholder &&
|
!placeholder &&
|
||||||
|
!!stdout?.isTTY &&
|
||||||
c === v.length &&
|
c === v.length &&
|
||||||
!v.includes('\n') &&
|
!v.includes('\n') &&
|
||||||
stringWidth(text) === text.length &&
|
stringWidth(text) === text.length &&
|
||||||
@@ -796,6 +799,7 @@ export function TextInput({
|
|||||||
c += text.length
|
c += text.length
|
||||||
|
|
||||||
if (simpleAppend) {
|
if (simpleAppend) {
|
||||||
|
stdout!.write(text)
|
||||||
commit(v, c, true, false)
|
commit(v, c, true, false)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user