Как сказано на GitHub разработчика:
Alacritty - A fast, cross-platform, OpenGL terminal emulator
Со слов автора он создал его, так как неудобно было конфигурировать st. (–htrd: add cite)
Если коротко, то это эмулятор терминала с быстрым выводом текста на экран, используя GPU (OpenGL). Без поддержки табов, без конфигурировать через меню, но с достаточно гибкими возможностями конфигурации через файлы, включая подхват конфигурации на лету.
Баги
Да! Сразу с них :)
Запуск Midnight Commander
Судя по всему, терминал не совсем корректно обрабатывает завершение дочерних процессов. Так, если открыть терминал, запустить mc
, а потом закрыть по Alt+F4 (ну или какая у вас комбинация для закрытия окна) и так повторить несколько раз, то а определённый запуск mc всё в терминале зависнет. И… развиснет когда вы рестартуете сервис gpm
:
systemctl restart gpm
Судя по всему мало кто в современном мире использует gpm
, но да ладно. Чуть позже или разберёмся или баг-реквест отправим. На Konsole такой проблемы не наблюдаю.
Размер шрифтов мониторах одной системы с разным DPI
Об этом подробнее ниже.
Конфигурация
Конфиг на YAML. Простой и понятный до безобразия.
Терминал сам не создаёт конфигурационных файлов. Хотя в исходниках лежит alacritty.yml
, в котором есть все опции, но закомментированные: копируешь, редактируешь что нужно. Как мне кажется, было бы неплохо генерировать этот файл при первом запуске, если его не существует ещё. Или делать генерацию через параметр коммандной строки.
Рекоммендую сразу задать:
# Live config reload (changes require restart)
live_config_reload: true
Тогда изменения настроек будут применяться сразу и к запущенным копиям программы.
Большой плюс автору за наличие man-страницы:
alacritty(1)
в которой чётко и ясно написано, где и в какой последовательности ищется конфигурация. Я выбрал вариант размещения в .config/alacritty/alacritty.yml
.
Шаблон взял с GitHub: https://github.com/alacritty/alacritty/blob/master/alacritty.yml.
Как можно увидеть, схемы оформления задаются концигурационными параметрами. Править их не стоит в конфиге, а вынести отдельно, благо, что можно импортировать настройки из других файлов.
Собственно файл со схемами я урвал с этого проекта: https://github.com/eendroroy/alacritty-theme/blob/master/schemes.yaml. Именно так, целым файлом. Чуть позже расскажу почему.
И вот такая полная конфигурация образовалась у меня:
Или, за исключением комментариев:
import:
- ~/.config/alacritty/schemes.yml
env:
TERM: xterm-256color
WINIT_X11_SCALE_FACTOR: '1.0'
window:
startup_mode: Maximized
dynamic_title: true
scrolling:
history: 10000
font:
normal:
family: Meslo LG M DZ
style: Regular
bold:
family: Meslo LG M DZ
style: Bold
italic:
family: Meslo LG M DZ
style: Italic
bold_italic:
family: Meslo LG M DZ
style: Bold Italic
size: 12
use_thin_strokes: false
cursor:
style:
shape: Underline
blinking: On
blink_interval: 500
thickness: 0.35
live_config_reload: true
Рассмотрим чуточку подробнее.
import:
- ~/.config/alacritty/schemes.yml
Это мы подключаем наш файл с описанием цветовых схем. Их там несколько и просто меняя одну строчку в конце мы можем легко их переключать. Ну и добавлять новые тоже.
env:
TERM: xterm-256color
WINIT_X11_SCALE_FACTOR: '1.0'
А вот это уже интересно. Это обход проблем.
В первом случае, если задан терминал alacritty
, то не работает dynamic title: когда ASNI последовательностью можно установить заголовок терминала. Есть репорт:
если пофиксить стартовые скрипты, то частично оно начинает работать, но не работает в Midnight Commander. В значении xterm-256color
работает и в mc.
По второй опции нужно смотреть репорты:
- https://github.com/alacritty/alacritty/issues/1501
- https://github.com/alacritty/alacritty/issues/1852
Там можно найти два варианта:
- Который использую я:
WINIT_X11_SCALE_FACTOR: '1.0'
- и:
WINIT_HIDPI_FACTOR: '1'
Второй вариант у меня не очень хорошо заработал: шрифты стали вести получше, но на экране ноутбука всё равно выходят сильно крупными, тогда, когда на внешнем мониторе - мелким.
В вашем случае проблемы может и не быть, быть не актуальной или подойдёт другой набор установок.
window:
startup_mode: Maximized
dynamic_title: true
Тут всё понятно: запускаться, по умолчанию, в развёрнутом состоянии. И поддерживать Dynamic Title (см. выше установку переменной окружения TERM=xterm-256color
).
scrolling:
history: 10000
Тут тоже всё просто - число строк буффера обратной прокрутки.
Настройку шрифтов я пропускаю, тут ничего из космо-науки нет.
cursor:
style:
shape: Underline
blinking: On
blink_interval: 500
thickness: 0.35
Мне нравится “олдскульный”, “DOSовский” курсор: горизонтальная линия, достаточно толстая и заметная (привет Konsole). Alacritty позволяет настроить всё как мне нравится.
live_config_reload: true
Очень удобная опция. Alacritty следит за своим конфигом, и если он изменился, то перечитывает его и применяет новые настройки. Понятно, что те же настройки переменных окружения подхватиться на лету не смогут, для этого нужен перезапуск дочернего процесса оболочки.
Ещё нюанс, что эта опция следит только за самим файлом конфигурации, но не следит за импортируемыми. Поэтому, в моей конфигурации, при изменении темы, нужно проделать следующий трюк:
touch alacritty.yml
Переключение тем
Пока выбирал темы, сделал два скрипта: первый устанавливает указанную тему и делает тач на файл конфигурации, что бы изменения подтянулись, а второй позволяет в цикле перебрать все темы (переход к следующей по Enter).
Предполагается, что скрипты лежат в ~/.config/alacritty/
-
scheme-switch.sh
:#!/usr/bin/env bash scheme=$1 if [ -z "$scheme" ]; then echo "Use: $0 <scheme>" echo "<scheme> must be defined in `schemes.yml`" exit 1 fi sed -i "s/^\(colors: \*\).*$/\1$scheme/" schemes.yml && \ touch alacritty.yml
-
scheme-loop.sh
:#!/usr/bin/env bash for line in $(cat schemes.yml | grep ': &' | awk -F: '{print $1}'); do echo "Use scheme: $line" ./scheme-switch.sh $line echo "Press Enter to continue..." read done
Вкладки
Ээээ… Как же так, заявлено же, что без них. Да, без них. Но есть
tabbed
.
Читам ман:
man tabbed
- или: https://manned.org/tabbed.1
А запускаем так:
tabbed alacritty --embed