# 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` и выше.
