Hatred's Log Place

DON'T PANIC!

Jan 30, 2021 - 4 minute read - Linux

Alacritty: первое знакомство

Как сказано на 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 = true

Тогда изменения настроек будут применяться сразу и к запущенным копиям программы.

Большой плюс автору за наличие man-страницы: alacritty(1) в которой чётко и ясно написано, где и в какой последовательности ищется конфигурация. Я выбрал вариант размещения в .config/alacritty/alacritty.toml.

Готового шаблона конфига больше нет, но появилась man страница alacritty(5)

Как можно увидеть, схемы оформления задаются концигурационными параметрами. Править их не стоит в конфиге, а вынести отдельно, благо, что можно импортировать настройки из других файлов.

Раньше я пользовался схемами проекта https://github.com/eendroroy/alacritty-theme, но теперь они портировались на TOML и переехали в основной проект: https://github.com/alacritty/alacritty-theme.git

И вот такая полная конфигурация образовалась у меня:

Или:

import = ["~/.config/alacritty/alacritty-theme/themes/konsole_linux.toml"]
live_config_reload = true

[cursor]
blink_interval = 500
blink_timeout = 0
thickness = 0.40

[cursor.style]
shape = "Underline"
blinking = "On"

[env]
TERM = "xterm-256color"
WINIT_X11_SCALE_FACTOR = "1.0"

[font]
size = 12

[font.bold]
family = "Meslo LG M DZ"
style = "Bold"

[font.bold_italic]
family = "Meslo LG M DZ"
style = "Bold Italic"

[font.italic]
family = "Meslo LG M DZ"
style = "Italic"

[font.normal]
family = "Meslo LG M DZ"
style = "Regular"

[keyboard]
bindings = [
    #{ key = "K", mods = "Shift|Control", chars = "\u000c" },
    #{ key = "K", mods = "Shift|Control", action = "ClearHistory" },
    { key = "K", mods = "Control|Shift", "chars" = "reset\n" },
    { action = "CreateNewWindow", key = "N", mods = "Shift|Control"}
]

[scrolling]
history = 10000

[window]
dynamic_title = true
startup_mode = "Maximized"

Рассмотрим чуточку подробнее.

import = ["~/.config/alacritty/alacritty-theme/themes/konsole_linux.toml"]

Это мы подключаем наш файл с описанием цветовой схемы.

[env]
TERM = "xterm-256color"
WINIT_X11_SCALE_FACTOR = "1.0"

А вот это уже интересно. Это обход проблем.

В первом случае, если задан терминал alacritty, то не работает dynamic title: когда ASNI последовательностью можно установить заголовок терминала. Есть репорт:

если пофиксить стартовые скрипты, то частично оно начинает работать, но не работает в Midnight Commander. В значении xterm-256color работает и в mc.

По второй опции нужно смотреть репорты:

Там можно найти два варианта:

  1. Который использую я: WINIT_X11_SCALE_FACTOR: '1.0'
  2. и: WINIT_HIDPI_FACTOR: '1'

Второй вариант у меня не очень хорошо заработал: шрифты стали вести получше, но на экране ноутбука всё равно выходят сильно крупными, тогда, когда на внешнем мониторе - мелким.

В вашем случае проблемы может и не быть, быть не актуальной или подойдёт другой набор установок.

[window]
dynamic_title = true
startup_mode = "Maximized"

Тут всё понятно: запускаться, по умолчанию, в развёрнутом состоянии. И поддерживать Dynamic Title (см. выше установку переменной окружения TERM=xterm-256color).

[scrolling]
history = 10000

Тут тоже всё просто - число строк буффера обратной прокрутки.

Настройку шрифтов я пропускаю, тут ничего из космо-науки нет.

[cursor]
blink_interval = 500
blink_timeout = 0
thickness = 0.40

[cursor.style]
shape = "Underline"
blinking = "On"

Мне нравится “олдскульный”, “DOSовский” курсор: горизонтальная линия, достаточно толстая и заметная (привет Konsole). Alacritty позволяет настроить всё как мне нравится.

live_config_reload = true

Очень удобная опция. Alacritty следит за своим конфигом, и если он изменился, то перечитывает его и применяет новые настройки. Понятно, что те же настройки переменных окружения подхватиться на лету не смогут, для этого нужен перезапуск дочернего процесса оболочки.

Ещё нюанс, что эта опция следит только за самим файлом конфигурации, но не следит за импортируемыми. Поэтому, в моей конфигурации, при изменении темы, нужно проделать следующий трюк:

touch alacritty.toml

Вкладки

Ээээ… Как же так, заявлено же, что без них. Да, без них. Но есть tabbed.

Читам ман:

А запускаем так:

tabbed -n Alacritty alacritty --embed

Опция -n Alacritty нужна что бы установить класс окна через атрибут WM_CLASS. Как следствие, подтянется иконка приложения и в треях, которые понимают про группировку по классу окна, оно попадёт в группу.