Compare commits

...

2 Commits

Author SHA1 Message Date
Julien Calixte
abce8b65cd style(editor): widen completion popup to avoid horizontal scroll 2026-06-19 10:39:55 +02:00
Julien Calixte
3d7175006e feat(editor): navigate completions with Ctrl+N/Ctrl+P 2026-06-19 10:39:49 +02:00

View File

@@ -95,14 +95,21 @@ function onKeydown(e: KeyboardEvent) {
if (e.key !== 'Escape') justEscaped = false if (e.key !== 'Escape') justEscaped = false
const ctx = completion.value const ctx = completion.value
if (!ctx) return if (!ctx) return
const move = (delta: number) => {
e.preventDefault()
selected.value = (selected.value + delta + ctx.items.length) % ctx.items.length
}
// Ctrl+N / Ctrl+P mirror ArrowDown / ArrowUp (readline-style navigation).
if (e.ctrlKey && (e.key === 'n' || e.key === 'p')) {
move(e.key === 'n' ? 1 : -1)
return
}
switch (e.key) { switch (e.key) {
case 'ArrowDown': case 'ArrowDown':
e.preventDefault() move(1)
selected.value = (selected.value + 1) % ctx.items.length
break break
case 'ArrowUp': case 'ArrowUp':
e.preventDefault() move(-1)
selected.value = (selected.value - 1 + ctx.items.length) % ctx.items.length
break break
case 'Enter': case 'Enter':
case 'Tab': case 'Tab':
@@ -258,8 +265,8 @@ function syncScroll() {
margin: 0; margin: 0;
padding: 0.25rem; padding: 0.25rem;
list-style: none; list-style: none;
min-width: 13rem; min-width: 16rem;
max-width: 22rem; max-width: 30rem;
max-height: 14rem; max-height: 14rem;
overflow-y: auto; overflow-y: auto;
background: var(--color-base-100); background: var(--color-base-100);