vcom/docs/project-description.md

129 lines
5.9 KiB
Markdown
Raw Normal View History

# vcom: описание проекта и реализованного функционала
`vcom` — терминальный файловый менеджер в стиле Midnight Commander, написанный на Go на базе Bubble Tea.
## 1. Основная концепция
Приложение работает в двухпанельном режиме:
- левая файловая панель,
- правая файловая панель.
Активная панель управляется с клавиатуры и мыши, неактивная сохраняет своё состояние (путь, позицию курсора).
## 2. Реализованные режимы интерфейса
- Двухпанельный браузер директорий.
- Режим Info/Preview (`i`): неактивная панель временно заменяется превью выбранного элемента из активной панели.
- Режим выделения текста в превью (`Ctrl+t`) для текстовых файлов.
- Модальные окна (подтверждения, прогресс операций, help, уведомления).
## 3. Навигация и просмотр
- Перемещение по списку: `j/k`, `Up/Down`, `PgUp/PgDn`.
- Переключение активной панели: `Tab`, `h`, `l`.
- Вход в директорию: `Enter` / `Right`.
- Переход в родительскую директорию: `Backspace` / `Left`.
- Обновление панелей: `r`.
- Внешний просмотр файла: `F3` (`$PAGER` при наличии).
- Внешнее редактирование файла: `F4` (`$VISUAL/$EDITOR` или fallback-редакторы).
## 4. Операции с файлами и директориями
- `F5` — копирование.
- `F6` — перемещение.
- `F7` — создание директории.
- `F8` — удаление.
Операции copy/move реализованы с:
- предварительным диалогом подтверждения,
- подсчётом объёма и количества файлов,
- прогрессом по байтам и по количеству файлов,
- возможностью отправить операцию в фон (`b`),
- уведомлением о завершении фоновой операции.
Подтверждение overwrite учитывается для существующих целей.
## 5. Мультивыделение
Реализовано выделение элементов с клавиатуры:
- `Shift+Up/Shift+Down` (а также `Shift+K/Shift+J`) добавляют/снимают выделение на текущем проходе.
- Повторный проход по уже выделенному элементу снимает его выделение (toggle).
- `Esc` очищает выделение активной панели.
Если есть выделенные элементы, `F5/F6/F8` применяются ко всему выделенному набору.
Если выделения нет — операция применяется к текущему элементу под курсором.
## 6. Работа мыши
- ЛКМ: выбор элемента и активация панели.
- Двойной ЛКМ: открытие элемента.
- ПКМ: переключение режима Info/Preview для выбранного элемента.
- Колесо мыши: прокрутка списка; в preview-области — прокрутка содержимого превью.
## 7. Help-окно
`F1` или `?` открывает справку по управлению.
Особенности help:
- логические блоки (Navigation, View and Panels, Dialogs and Transfers, Mouse),
- цветовое оформление заголовков и элементов на основе активной темы,
- закрытие по `F1`, `?`, `Esc`, `Enter`, `q`.
## 8. Модальные окна и закрытие
Во всех модальных окнах поддержано закрытие по `q`.
Поведение в прогрессе copy/move:
- `q` не прерывает операцию,
- окно закрывается,
- операция продолжается в фоне.
## 9. Визуальные доработки
- Убрана верхняя title-строка приложения.
- Убраны текстовые лейблы `LEFT/RIGHT` в заголовках панелей.
- Убрана строка `CONTENT` в preview-панели.
- Путь активной панели сделан жирным и в цвете `TextFile` текущей темы.
- Подсветка курсора отображается только в активной панели.
- Выделенные (marked) элементы подсвечиваются цветом `Danger` темы по всей строке.
## 10. Конфигурация
Поддерживается TOML-конфиг (`vcom.toml`), включая:
- стартовые директории,
- визуальные параметры UI,
- набор и видимость колонок,
- сортировку,
- поведение превью,
- поведение подтверждений и операций.
## 11. Технологический стек
- Go
- Bubble Tea (`github.com/charmbracelet/bubbletea`)
- Bubbles
- Lip Gloss
- TOML (`pelletier/go-toml/v2`)
## 12. Сборка и запуск
Локально:
```bash
go run ./cmd/vcom
```
Сборка бинаря:
```bash
go build -o vcom ./cmd/vcom
```
Nix:
```bash
nix run .
```
Для запуска тегов из GitHub-репозитория рекомендуется использовать версии с `v0.1.1` и выше.