feat: less completions
This commit is contained in:
@@ -264,7 +264,7 @@ export function useCommander(
|
||||
const [entries, setEntries] = createSignal<CommanderEntry[]>([]);
|
||||
const [showCompletions, setShowCompletions] = createSignal(false);
|
||||
const [completions, setCompletions] = createSignal<CompletionItem[]>([]);
|
||||
const [selectedCompletion, setSelectedCompletion] = createSignal(0);
|
||||
const [selectedCompletion, setSelectedCompletionState] = createSignal(0);
|
||||
const [isFocused, setIsFocused] = createSignal(false);
|
||||
|
||||
// 命令历史
|
||||
@@ -335,12 +335,30 @@ export function useCommander(
|
||||
const comps = getCompletions(input, commands);
|
||||
setCompletions(comps);
|
||||
setShowCompletions(comps.length > 0 && isFocused());
|
||||
setSelectedCompletion(0);
|
||||
setSelectedCompletionState(0);
|
||||
};
|
||||
|
||||
const setSelectedCompletion = (v: number | ((prev: number) => number)) => {
|
||||
const comps = completions();
|
||||
const maxVisible = 3;
|
||||
const maxIdx = Math.min(comps.length - 1, maxVisible - 1);
|
||||
|
||||
if (typeof v === 'function') {
|
||||
setSelectedCompletionState(prev => {
|
||||
const next = v(prev);
|
||||
return Math.max(0, Math.min(next, maxIdx));
|
||||
});
|
||||
} else {
|
||||
setSelectedCompletionState(Math.max(0, Math.min(v, maxIdx)));
|
||||
}
|
||||
};
|
||||
|
||||
const acceptCompletion = () => {
|
||||
const idx = selectedCompletion();
|
||||
const comp = completions()[idx];
|
||||
const comps = completions();
|
||||
// 确保索引在有效范围内
|
||||
const validIdx = Math.min(idx, Math.min(comps.length - 1, 2));
|
||||
const comp = comps[validIdx];
|
||||
if (!comp) return;
|
||||
|
||||
const input = inputValue();
|
||||
|
||||
Reference in New Issue
Block a user