voidzero-dev / voidzero-dev/vite-plus

Support wrap-around arrow-key navigation in the vp run / vpr task selector

Offen
#2,638 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
5.8k
Forks
262
Ø Merge
23 Std. 18 Min.
Gemergte PRs (30 T.)
139

Beschreibung

### Description

Please support wrap-around arrow-key navigation in the interactive task selector opened by `vp run` / `vpr` without a task name.

Currently, pressing Up on the first task leaves the selection on the first task, and pressing Down on the last task leaves it on the last task. `nr` from `@antfu/ni` already allows moving directly between the first and last entries this way. Matching that behavior would make it quicker to reach tasks near the end of a long list and preserve familiar keyboard navigation when switching from `nr` to `vpr`.

I intend to submit a small implementation PR to the shared `vt_select` component in `voidzero-dev/vite-task` and link it here.

### Suggested solution

- Up on the first selectable task selects the last selectable task.
- Down on the last selectable task selects the first selectable task.
- Wrap within the current search results, not the unfiltered list.
- Skip non-selectable workspace/group headings and scroll the newly selected task into view.
- Empty results and a single result remain safe no-ops.

### Reproduction

Create a directory containing only this `package.json` (no dependency installation is needed):

```json
{
"name": "task-picker-wrap-repro",
"private": true,
"scripts": {
"alpha": "echo alpha",
"beta": "echo beta",
"gamma": "echo gamma"
}
}
```

1. Run `vpr` (or `vp run`) in an interactive terminal.
2. With `alpha` highlighted, press Up. It remains on `alpha`; the requested behavior is to select `gamma`.
3. Press Down until `gamma` is highlighted, then press Down once more. It remains on `gamma`; the requested behavior is to select `alpha`.
4. Press Ctrl+C to exit without running a task.

### Alternative

Repeated arrow presses or typing a search query work, but require more input than wrapping directly at the list boundary.

### Additional context

Reproduced with Vite+ `0.3.1` on Linux x86_64 in a real pseudo-terminal. The comparison command is `@antfu/ni` `30.5.0`.

The boundary checks are in [`State::move_up` and `State::move_down` in `vt_select`](https://github.com/voidzero-dev/vite-task/blob/9a1d32cfc833c46772f29c10958794b1d55e2141/crates/vt_select/src/interactive.rs#L191). This request concerns the `vp run` task selector, not Vite, Vitest, tsdown, Rolldown, or Oxc.

### Validations

- [x] Read the contributing guidelines.
- [x] Searched existing issues and PRs in both `vite-plus` and `vite-task` and did not find the same request.
- [x] This concerns the Vite+ task-selection workflow.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in crates/vt_select/src/interactive.rs bei State::move_up und State::move_down und führe dann die bereitgestellte vpr- oder vp-run-Reproduktion mit der beispielhaften package.json aus. Erledigt bedeutet, dass Up und Down innerhalb der gefilterten auswählbaren Aufgaben zyklisch wechseln, Überschriften überspringen, die neue Auswahl in den sichtbaren Bereich scrollen und bei leeren oder Listen mit nur einem Ergebnis sicher bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust
Bereich
cli
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
76/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.