128 lines
5.9 KiB
Markdown
128 lines
5.9 KiB
Markdown
# 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` и выше.
|