vcom/plans/feature-roadmap.md
vrubelroman 08c095e74f feat: add interactive file search/filter (feature #1)
Pressing / opens a filter bar at the bottom of the screen. As the user
types, the active pane's entries are filtered in real-time using
case-insensitive substring matching. The .. entry is always preserved.

Key bindings:
  /       - open filter input (re-opens with previous query if active)
  Esc     - clear filter and restore full list
  Enter   - commit filter (keeps filtering active, closes input bar)
  Up/Down - navigate the filtered list while typing
  PgUp/Dn - scroll the filtered list

Filter is automatically cleared when navigating to a different directory
(Enter on a folder, Backspace to parent, opening an archive).

Modified files:
  - internal/ui/keymap.go: added Filter key binding (/)
  - internal/ui/model.go: filterMode, filterQuery, filterInput fields;
    filteredPane() helper for View rendering; filter handling in Update();
    renderFilterBar() for the bottom bar UI; clearFilter() helper;
    adjustCursorForFilter() to keep cursor in bounds

Created files:
  - plans/feature-roadmap.md
2026-04-27 17:14:48 +03:00

2.9 KiB
Raw Blame History

Feature Roadmap — vcom

Выбранные фичи (по приоритету)

1. Поиск/фильтрация файлов (/)

  • Filter mode: при нажатии / открывается текстовый инпут внизу экрана (поверх footer, как модальное окно)
  • Фильтрация []Entry в активной панели на лету по strings.Contains/fuzzy-match
  • Подсветка совпадений в строках (изменить renderEntryRow — передать query, подсветить matched part)
  • Esc — выход из filter mode, восстановление полного списка
  • Enter — зафиксировать фильтр (оставить отфильтрованный список), выход из filter mode
  • При смене директории фильтр сбрасывается

2. Bulk rename (массовое переименование)

  • Выделить файлы (Shift+↑/↓), нажать Ctrl+R (новая клавиша)
  • Модальное окно с текстовым полем для паттерна: prefix_%N.ext
  • Превью результата (старое имя → новое имя)
  • Выполнить rename для всех выделенных

3. Корзина (trash support)

  • Delete/F8 — перемещать в ~/.local/share/Trash/ по freedesktop spec
  • Shift+Delete —永久ное удаление (как сейчас)
  • browser.confirm_delete применяется к永久ному удалению
  • Новая опция конфига: behavior.use_trash = true (default: true)

4. Directory history (назад/вперед)

  • []string стек истории на каждую панель
  • Alt+← / Alt+→ — навигация назад/вперед
  • При переходе в новую директорию (Enter, Backspace, клик) — push в history
  • При навигации по истории — не создавать новые записи

5. Расширенный превью форматов

  • PDF — извлечение текста через pdftotext (если доступен)
  • Аудио — метаданные через ffprobe (битрейт, длительность, кодек)
  • Видео — метаданные + превью через ffmpegthumbnailer/ffprobe
  • Fallback если утилита не установлена

Процесс

  1. Каждая фича реализуется в отдельной ветке feature/N-имя
  2. После реализации — commit + push
  3. После апрува — merge в main
  4. Порядок: 1 → 4 → 3 → 2 → 5 (от простого к сложному)