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
44 lines
2.9 KiB
Markdown
44 lines
2.9 KiB
Markdown
# 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 (от простого к сложному)
|