Skip to content

Repository files navigation

Vuender

Аналог Finder для macOS, написанный на SwiftUI. Современный файловый менеджер с встроенным терминалом и удобной навигацией.

Версия: 0.1.0

Возможности

Основной функционал

  • Просмотр файлов и папок — табличное отображение содержимого директорий
  • Навигация — кнопки "Назад", "Вперед" и "Вверх" для удобного перемещения по истории
  • Ввод пути — поле ввода с автодополнением путей к директориям
  • Хлебные крошки — визуальное отображение текущего пути
  • Сортировка — сортировка файлов по имени, размеру, дате модификации

Работа с файлами

  • Открытие файлов — двойной клик или Enter для открытия файлов в системе
  • Переименование — переименование файлов и папок
  • Создание — создание новых файлов и директорий
  • Удаление — удаление файлов и папок
  • Копирование — копирование имени файла, пути или полного пути в буфер обмена
  • Перетаскивание — drag & drop для перемещения файлов между директориями
  • Контекстное меню — правый клик для доступа к операциям с файлами

Дополнительные возможности

  • Встроенный терминал — интегрированный терминал на базе SwiftTerm для работы в текущей директории
  • Множественные окна — поддержка нескольких окон с разными директориями
  • Командная строка — запуск приложения с указанием пути через аргументы командной строки
  • URL-схема — поддержка кастомной URL-схемы vuender:// для открытия директорий

Требования

  • macOS 26.0 или выше
  • Swift 6.2 или выше
  • Xcode (для сборки)

Установка

Сборка из исходников (CLI)

  1. Клонируйте репозиторий:
git clone <repository-url>
cd vuender
  1. Соберите проект:
swift build
  1. Запустите приложение:
swift run vuender

Сборка .dmg образа

Для сборки .dmg:

chmod +x build-dmg.sh   # один раз
./build-dmg.sh

Скрипт соберёт релизную версию, создаст минимальный .app‑bundle и сгенерирует .dmg в корне репозитория с именем:

Vuender-<VERSION>.dmg

где VERSION берётся из Sources/vuender/Core/AppVersion.swift.

Запуск с указанием пути

swift run vuender /path/to/directory

Использование флага --reuse

Для повторного использования существующего окна:

swift run vuender --reuse /path/to/directory

Структура проекта

Sources/vuender/
├── App.swift                    # Точка входа приложения
├── AppDelegate.swift            # Обработка событий приложения и URL-схем
├── Core/
│   ├── FileBrowserViewModel.swift  # ViewModel для управления состоянием браузера
│   └── FileItem.swift             # Модель файла/папки
├── Services/
│   ├── FileManagerService.swift    # Сервис для работы с файловой системой
│   ├── PathAutocompleteService.swift  # Сервис автодополнения путей
│   └── WindowManager.swift          # Управление окнами приложения
└── Views/
    ├── ContentView.swift           # Главное представление
    ├── Content/
    │   ├── FileNameInputView.swift  # Ввод имени файла
    │   ├── FileNameView.swift       # Отображение имени файла
    │   └── FileRenameView.swift     # Переименование файла
    ├── FileBrowser/
    │   ├── FileBrowserView.swift    # Основной вид браузера
    │   ├── FileTableView.swift      # Табличное представление файлов
    │   ├── FileContextMenu.swift    # Контекстное меню
    │   ├── EmptyAreaContextMenu.swift  # Контекстное меню пустой области
    │   ├── EmptyStateView.swift     # Пустое состояние
    │   ├── LoadingView.swift        # Индикатор загрузки
    │   ├── TableRowView.swift       # Представление строки таблицы
    │   ├── KeyPressHandler.swift    # Обработка нажатий клавиш
    │   └── FileItemPasteboardWriter.swift  # Поддержка drag & drop
    ├── Header/
    │   ├── NavigationBar.swift      # Панель навигации
    │   ├── NavigationBackButton.swift    # Кнопка "Назад"
    │   ├── NavigationForwardButton.swift # Кнопка "Вперед"
    │   ├── NavigationUpButton.swift      # Кнопка "Вверх"
    │   ├── PathInputView.swift      # Поле ввода пути
    │   ├── PathAutocompleteView.swift    # Автодополнение пути
    │   ├── PathBreadcrumbView.swift      # Хлебные крошки
    │   └── PathDisplay.swift        # Отображение пути
    └── Footer/
        ├── FooterView.swift         # Нижняя панель
        ├── TerminalPanelView.swift  # Панель терминала
        ├── SwiftTermView.swift      # Интеграция SwiftTerm
        └── ResizableDivider.swift   # Разделитель с изменяемым размером

Основные компоненты

FileBrowserViewModel

Центральный компонент управления состоянием:

  • Управление текущей директорией
  • История навигации (вперед/назад)
  • Загрузка и сортировка файлов
  • Операции с файлами (создание, удаление, переименование)
  • Обработка drag & drop

FileManagerService

Сервис для работы с файловой системой:

  • Получение содержимого директорий
  • Создание файлов и папок
  • Переименование и удаление
  • Перемещение файлов
  • Открытие файлов в системе
  • Открытие терминала в указанной директории

PathAutocompleteService

Сервис автодополнения путей:

  • Автодополнение при вводе пути
  • Поддержка абсолютных и относительных путей
  • Поддержка ~ для домашней директории
  • Валидация путей

WindowManager

Управление окнами приложения:

  • Регистрация и отслеживание окон
  • Открытие новых окон с указанными путями
  • Повторное использование существующих окон
  • Обработка закрытия окон

Горячие клавиши

  • Enter — открыть файл/папку
  • Backspace — перейти в родительскую директорию
  • Cmd+O — открыть файл
  • Cmd+N — создать новый файл
  • Cmd+Shift+N — создать новую папку
  • Delete — удалить выбранный файл
  • Cmd+C — копировать файл
  • Cmd+V — вставить файл
  • Cmd+R — переименовать файл

URL-схема

Приложение поддерживает кастомную URL-схему vuender://:

vuender://open/path/to/directory

Это позволяет открывать директории из других приложений или через командную строку.

Зависимости

  • SwiftTerm — библиотека для работы с терминалом

Разработка

Проект использует Swift Package Manager. Основные зависимости указаны в Package.swift.

Архитектура

Приложение следует архитектуре MVVM:

  • ModelFileItem и другие модели данных
  • View — SwiftUI представления в папке Views/
  • ViewModelFileBrowserViewModel для управления состоянием

Добавление новых функций

  1. Новые операции с файлами — добавьте методы в FileManagerService и вызовите их из FileBrowserViewModel
  2. Новые представления — создайте SwiftUI View в соответствующей папке Views/
  3. Новые сервисы — добавьте в папку Services/ и используйте паттерн Singleton при необходимости

Лицензия

MIT

Авторы

AI-generated product. 90+% of the code is generated by AI.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages