Ter n i m al (обратите внимание на правописание) - это программа, которая привлекает анимированную форму жизни в терминале с использованием символов блока Unicode. Он работает в большинстве терминальных эмуляторов и с большинством моносированных шрифтов.

С практической точки зрения программа не очень полезна. Это, однако, содержит немного классных технологий и математики:
Тернимал также является упражнением в минимализме и сдержанности. Написанная всего лишь 1000 строк ржавчины, он не имеет зависимостей и потребляет очень мало ресурсов: 400 КБ на диске, 3 МБ оперативной памяти и 4 % от одного ядра процессора с параметрами по умолчанию. Он реализует свои собственные линейные операции алгебры с нуля, а также базовый анализ командной строки и простой генератор случайных чисел.
Тернимал не имеет зависимостей, кроме стандартной библиотеки ржавчины и не требует груза для строительства. Должен быть установлен только rustc (> = 1,20), в какой момент можно построить точку, с помощью:
git clone https://github.com/p-e-w/ternimal.git
cd ternimal
rustc -O ternimal.rs
По сути, Тернимал делает не более чем окрашивание поля расстояния от сегмента извилистого пути. Однако существует множество параметров, контролирующих этот процесс, почти всем из которых можно манипулировать через командную строку.
Это делает систему очень гибкой. Ниже приведены лишь несколько примеров того, что возможно:
./ternimal length=100 thickness=1,4,1,0,0 radius=6,12 gradient=0:#666600,0.5:#00ff00,1:#003300

Синусоидальные волны могут использоваться для создания довольно органических форм. В этом случае одна полуволн образует тело змеи.
./ternimal length=200 thickness=0,4,19,0,0

Тернимал делает только одну модель. Тем не менее, изменения толщины могут придать появлению нескольких разъединенных сущностей, движущихся скоординированными способами.
./ternimal length=20 thickness=70,15,0,1,0 padding=10 radius=5 gradient=0.03:#ffff00,0.15:#0000ff,0.3:#ff0000,0.5:#00ff00

Функция толщины включает параметр времени. Это позволяет определить анимации формы. Можно указать множество терминов серии Фурье, что обеспечивает очень сложные анимации.
Тернимал очень оптимизирован для производительности, в той степени, в которой во многих ситуациях время ЦП, необходимое для генерации его вывода, меньше, чем то, что эмулятор терминала для отображения его. Различные трюки используются для минимизации вычислительной нагрузки и размера выходных данных. В терминале GNOME параметры по умолчанию составляют до 2500 кадров в секунду.
Я пробовал все под солнцем, чтобы выжать еще большую производительность, со смешанными результатами. Некоторые из неудачных/полу-успешных попыток включают:
f32 вместо f64 . Это дает ускорение на 5-10 %, но через несколько дней сталкивается с проблемами точности. Возможно, можно было бы «сбросить» время и значения положения через регулярные промежутки времени, чтобы избежать этого, но логика была бы довольно сложной.stdout и/или буферизацию. Хотя Тернимал записывает большое количество продукции, эта оптимизация приводит только к разочаровывающему ускорению на 1 % и поэтому была заброшена.format! Для этой цели трудно победить, и каждая альтернатива, которую я пробовал, была либо равна, либо медленнее.target-cpu=native . Это также не дало измеримого улучшения.Профилирование с помощью Callgrind и Oprofile показывает, что большая часть времени процессора потрачена на строительство и написание выходной строки, и что вычисления рендеринга играют только роль для очень больших моделей. Учитывая отсутствие успеха, пытаясь быстрее сделать обработку выводов, кажется разумным сказать, что производительность Тернимала уже довольно удовлетворительная.
Тернимал был протестирован на Linux, MacOS и Windows.
На Linux почти все терминальные эмуляторы визуаливы безупречно. На macOS рекомендуются iTerm2 или alacritty. В Windows PowerShell и WSL работают хорошо, и Conemu также работает, но не хватает 24-разрядных цветов.
Скорее всего, потому что ваш терминал не поддерживает 24-разрядные последовательности цвета RGB. Это, в свою очередь, вероятно, означает, что вы используете MacOS по умолчанию Terminal.App, который является единственным основным эмулятором терминала, все еще отсутствует этой функции.
У вас есть два варианта:
true_color=false , чтобы вернуться к палитре 256 цветов, которая поддерживается практически всеми эмулятором терминала (но не выглядит так хорошо).Либо потому, что символы блоков вашего шрифта не полностью заполняют ячейку символа, либо потому, что ваш терминал имеет расстояние между линиями, превышающее ноль.
Тернимал лучше всего работает с шрифтами, которые имеют соотношение сторон персонажа как можно ближе к 2: 1. Шрифт в экране - замечательная Иошевка.
Консоль Linux не поддерживает шрифты Unicode. Однако он, по -видимому, распознает кодирование Unicode и пытается перевести определенные точки кода Unicode в код точек в его внутреннем кодировании, что включает в себя символы блока, требуемые Ternimal.
Похоже, что в этом конверсии есть ошибка. Верхняя половина блока переводится правильно, но нижняя половина блока не является полосатым рисунком.
Так:

Участники всегда приветствуются. Тем не менее, пожалуйста, подайте проблему, описывающую, что вы собираетесь добавить перед открытием запроса на вытяжение, особенно для новых функций! У меня есть четкое представление о том, что я хочу (и не хочу), чтобы быть радующим, поэтому обсуждение потенциальных дополнений может помочь вам избежать дублирования и потраченной впустую работы.
Способствуя, вы соглашаетесь выпустить свои изменения по той же лицензии, что и остальная часть проекта (см. Ниже).
Copyright © 2017 Philipp Emanuel Weidmann ([email protected])
Выпущено в соответствии с условиями общей публичной лицензии GNU, версия 3