Skip to content

Boboycha/FMXTerminal

Repository files navigation

FMX-Terminal (Skia)

FMX-Terminal — это высокопроизводительный компонент эмулятора терминала (VT100/ANSI) для Delphi FireMonkey, использующий возможности библиотеки Skia для аппаратного ускорения рендеринга.

Компонент создан для тех, кому нужен быстрый, плавный и кросс-платформенный терминал внутри FMX приложений.

🔥 Особенности

  • Высокая производительность:
    • Использует Skia для отрисовки (GPU-ускорение).
    • Batch Rendering: Группировка символов для минимизации вызовов отрисовки.
    • Dirty Lines: Перерисовываются только измененные строки.
    • Hardware Scroll: Скроллинг реализован через сдвиг битмапа (Backbuffer), что обеспечивает плавность даже при большом потоке данных.
  • Совместимость:
    • Поддержка основных управляющих последовательностей VT100/Xterm/ANSI.
    • Корректная работа с псевдографикой (Line Drawing) — рамки в mc, htop, ncdu отображаются правильно.
    • Поддержка 256 цветов и TrueColor.
  • Функциональность:
    • Выделение текста мышью (как в Putty/VSCode).
    • Буфер обмена (Ctrl+Shift+C / Ctrl+Shift+V).
    • Поддержка мыши (клики, скролл) в консольных приложениях (SGR mouse mode).
    • Поддержка тем оформления (загрузка из файлов .theme).
    • Умный скроллбэк (история команд).

📦 Требования

  • Delphi 12 Athens (Рекомендуется) — Skia уже встроена, ничего дополнительно устанавливать не нужно.
  • Или Delphi 11 Alexandria — требуется установка Skia4Delphi через GetIt.

🚀 Установка

  1. Скачайте этот репозиторий.
  2. Добавьте папку с исходным кодом в Library Path вашей IDE или положите файлы рядом с проектом.
  3. Включите Skia в вашем проекте:
    • Для Delphi 12: В файле проекта .dpr или в коде инициализации убедитесь, что установлено GlobalUseSkia := True;.
    • Для старых версий: Правый клик по проекту -> Enable Skia.

💻 Как использовать

Компонент TnbTerminal (наследник TSkPaintBox) можно создавать динамически или использовать в Design-time (если зарегистрировать).

Пример создания (Runtime)

uses
Terminal.Control, Terminal.Theme;

procedure TFormMain.FormCreate(Sender: TObject);
begin
// Создаем терминал
Terminal := TnbTerminal.Create(Self);
Terminal.Parent := LayoutClient;
Terminal.Align := TAlignLayout.Client;

// Настраиваем шрифт (важно использовать моноширинный)
Terminal.FontFamily := 'Consolas';
Terminal.FontSize := 13;

// Подключаем обработчик данных (то, что вводит пользователь)
Terminal.OnData := DoTerminalData;
end;

// Отправка данных на сервер (например, через сокет)
procedure TFormMain.DoTerminalData(const S: string);
begin
MySocket.Send(S);
end;

// Получение данных от сервера
procedure TFormMain.OnSocketRead(const Data: string);
begin
Terminal.WriteText(Data);
end;

Управление темами

Вы можете загружать цветовые схемы из файлов:

Terminal.Theme.LoadThemeFromFile('Solarized-Dark.theme');

🤝 Участие (Contributing)

Приветствуются любые улучшения! Если вы нашли баг с парсингом ANSI-кодов или хотите добавить новую фичу:

  1. Форкните репозиторий.
  2. Создайте ветку (git checkout -b feature/NewFeature).
  3. Закоммитьте изменения.
  4. Сделайте Pull Request.

About

Эмулятор Терминала

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages