Screen — це термінальний рендерер, створений Аароном Френсісом, написаний на чистому PHP. Він функціонує як основа для Solo for Laravel і може використовуватися для створення багатих текстових інтерфейсів у будь-якому PHP-додатку. Зверніть увагу, що це не самостійний термінальний додаток і не слід плутати з GNU Screen, що використовується в Linux.
Що таке термінальний рендерер? Це інструмент, який обробляє текст та ANSI escape-послідовності для створення віртуального відображення термінального виходу. Він інтерпретує escape-послідовності, щоб відстежувати позицію курсора, застосовувати форматування тексту та керувати вмістом екрану.
Screen, відповідно, забезпечує безпечне інтерпретування ANSI операцій в ізольованому середовищі, гарантуючи правильне відображення термінального виходу в визначених областях.
# Особливості
- Чиста реалізація на PHP: Всюди лише одна залежність (Grapheme, інша бібліотека Solo)
- Широка підтримка ANSI: Підтримує позиціонування курсора, стилізацію тексту та маніпуляцію екраном
- Підтримка Unicode/Multibyte: Коректно обробляє символи UTF-8, включаючи емодзі та широкі символи
- Управління буфером: Підтримує окремі буфери для текстового вмісту та стилізації
- Обробка ширини символів: Вірно розраховує ширину відображення для CJK та інших символів подвійної ширини
- Прокручування: Підтримка вертикального прокручування з належним управлінням вмістом
# Приклад
use SoloTerm\Screen\Screen;
// Створити екран з розмірами (стовпці, рядки)
$screen = new Screen(80, 24);
// Провести кордон
$screen->write("┌" . str_repeat("─", 78) . "┐\n");
for ($i = 0; $i < 6; $i++) {
$screen->write("│" . str_repeat(" ", 78) . "│\n");
}
$screen->write("└" . str_repeat("─", 78) . "┘");
// Записати текст та ANSI escape-послідовності
$screen->write("\e[3;25HПривіт, \e[1;31mСпільнота Laravel News!\e[0m");
// Змінити курсор та додати ще тексту
$screen->write("\e[5;30HВи чудові! 🎉");
// Отримати рендерений вміст
echo $screen->output();
Результат виглядатиме наступним чином:

Встановіть цей пакет через Composer:
composer require soloterm/screen
Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub.