diff --git a/ui-tui/src/app/useInputHandlers.ts b/ui-tui/src/app/useInputHandlers.ts index 25243e9925..f777ba27d5 100644 --- a/ui-tui/src/app/useInputHandlers.ts +++ b/ui-tui/src/app/useInputHandlers.ts @@ -288,15 +288,27 @@ export function useInputHandlers(ctx: InputHandlerContext): InputHandlerResult { } if (key.upArrow && !cState.inputBuf.length) { - cycleQueue(1) || cycleHistory(-1) + const inputSel = getInputSelection() + const atStart = !cState.input || (!!inputSel && inputSel.start === 0 && inputSel.end === 0) - return + if (atStart) { + cycleQueue(1) || cycleHistory(-1) + + return + } } if (key.downArrow && !cState.inputBuf.length) { - cycleQueue(-1) || cycleHistory(1) + const inputSel = getInputSelection() + const atEnd = + !cState.input || + (!!inputSel && inputSel.start === cState.input.length && inputSel.end === cState.input.length) - return + if (atEnd || cState.historyIdx !== null) { + cycleQueue(-1) || cycleHistory(1) + + return + } } if (isAction(key, ch, 'c')) { diff --git a/ui-tui/src/components/textInput.tsx b/ui-tui/src/components/textInput.tsx index 536f2f0181..d5380faa2c 100644 --- a/ui-tui/src/components/textInput.tsx +++ b/ui-tui/src/components/textInput.tsx @@ -400,22 +400,20 @@ export function TextInput({ return } - if (selected) { - setInputSelection({ - clear: () => { + setInputSelection({ + clear: () => { + if (selRef.current) { selRef.current = null setSel(null) - }, - end: selected.end, - start: selected.start, - value: vRef.current - }) - } else { - setInputSelection(null) - } + } + }, + end: selected?.end ?? curRef.current, + start: selected?.start ?? curRef.current, + value: vRef.current + }) return () => setInputSelection(null) - }, [focus, selected]) + }, [cur, focus, selected]) useEffect( () => () => {