Одним утром, работая в терминале, я задумался о том, что мой эмулятор терминала недостаточно быстрый и удобный, поэтому решил искать альтернативу старику gnome-terminal. Облазив половину интернета, а также репозитории с dotfile'ами, я нашёл достойную замену, и готов рассказать и показать как перейти с надоедливого gnome-terminal (который к тому же и медленный) на более новые эмуляторы терминала.
C чего стоит начать?
Первое, что я усвоил за 3 года работы на Linux — не пытайтесь написать все конфиги сами. Рук не хватит. В наше время каждая программа имеет свой собственный формат конфигурации будь-то .json, .cson, .vimrc, и так далее. Написать всё под себя, не пытаясь ничего перенять у других — пытка для вашего ума. Инструменты созданы (в основном) для того чтобы на них работать, а не всю жизнь их настраивать.
А что не так с Gnome-terminal?
Лично мне не нравится в нём многое: внешний вид, скорость, функциональность, время подгрузки оболочки. Мне терминал нужен для того, чтобы редактировать мелкие скрипты, иногда с мультиплексором. Я часто открываю и закрываю терминал, поэтому он должен прогружаться быстро. Также я использую Vim, как основной редактор, так что он должен быть полностью совместим с новым эмулятором терминала.
Скорость
Давайте посмотрим сколько времени требуется каждой консоли для выведения всех символов от 1 до 1,000,000 (шрифты везде одинаковые, так что погрешность времени прогрузки шрифта ± одинакова.
Alacritty (с включенным tmux + zsh)
Gnome-terminal + zsh
Функциональность и использование памяти
В Gnome-terminal банально нет копирования при выделении мышью, при создании нового экземпляра этот монстр жрёт плюс 20 мегабайт памяти только на создание нового окна.
При включении zsh при старте, эмулятор gnome'a долго его грузил, что для меня уже недопустимо.
Решение проблемы
Облазив некоторые ресурсы (ссылки на которые будут приведены в конце), я понял что gnome-terminal никуда не годится. Мне нужен продуктивный эмулятор терминала, который можно настроить так, чтобы он буквально понимал меня с полуслова. Также терминал должен быстро прогружать связку tmux+zsh.
Hyper
Hyper — эмулятор терминала, который построен на веб-технологиях. Его можно видоизменять с помощью стилей CSS. Он расширяемый и быстрый.
Уже настроенный Hyper
Alacritty
Alacritty — эмулятор терминала, который считается самым быстрым (по заявлению разработчика). Его работа ускоряется за счёт видео карты, он умеет выдерживать большие нагрузки (как видно, он даже с включенным tmux + zsh справился быстрее, нежели gnome + zsh)
Уже настроенный Alacritty
Конфигурация
Конфигурацию я выложил на Github по ходу того, как писал (и пишу) её, а также переводил, если брал у кого-то кусочки или брал примеры из документации. По своему усмотрению вы сами можете твикать всё как захотите. Не стесняйтесь делать pull-запросы, если у вас есть предложения. Моя цель — собрать удобную конфигурацию, которая бы смогла удовлетворить почти всех, а также с помощью одного скрипта, программист мог спокойно взять и начать работать, а не находится в поисках "где там я свою конфигурацию потерял".
Также в репозитории приложены два файла fastconfig.sh и fastconfig_arch.sh. 1-й для Debian/Ubuntu, второй для Arch/Manjaro.
Пишем свою конфигурацию
Я начну с Alacritty.
# Всё, что выделяется мышью сразу идёт в буфер обмена
save_to_clipboard: true # или false
window:
padding:
# Отступы от самой рамки терминала по x,y. У меня отступов нет.
x: 0
y: 0
dynamic_padding: false
# Под декорациями имеется ввиду вид окна (transparent сделает края невидимыми)
decorations: full
startup_mode: Fullscreen # Windowed - оконный, Maximized - оконный на весь экран, Fullscreen - на весь экран
# # # # # # # # # # # # # # # # # # Прокрутка # # # # # # # # # # # # # # # # # #
scrolling:
history: 10000
multiplier: 3 # Сколько строк пропускается за один сдвиг колёсика мыши
faux_multiplier: 3
auto_scroll: true # При появлении новой строки в терминале, он прокручивается вниз
##################### Настройка шрифтов #####################
font:
normal:
family: "Fira Code"
bold:
family: "Fira Code"
italic:
family: "Fira Code"
size: 15.0 # Размер шрифта
#Отступы у шрифта
offset:
x: 0
y: 0
glyph_offset:
x: 0
y: 0
# Печатать жирный текст яркими шрифтами
draw_bold_text_with_bright_colors: true
########################### Темы ##########################
# Темы были взяты отсюда https://github.com/eendroroy/alacritty-theme
#Цвета (Base16 Default Dark)
colors:
# Default colors
primary:
background: '0x181818'
foreground: '0xd8d8d8'
# Colors the cursor will use if `custom_cursor_colors` is true
cursor:
text: '0xd8d8d8'
cursor: '0xd8d8d8'
# Normal colors
normal:
black: '0x181818'
red: '0xab4642'
green: '0xa1b56c'
yellow: '0xf7ca88'
blue: '0x7cafc2'
magenta: '0xba8baf'
cyan: '0x86c1b9'
white: '0xd8d8d8'
# Bright colors
bright:
black: '0x585858'
red: '0xab4642'
green: '0xa1b56c'
yellow: '0xf7ca88'
blue: '0x7cafc2'
magenta: '0xba8baf'
cyan: '0x86c1b9'
white: '0xf8f8f8'
######################## Шелл ##########################
shell:
program: /bin/bash
args:
- -c
- tmux
####################### Хоткеи ##########################
key_bindings:
- { key: V, mods: Command, action: Paste }
- { key: C, mods: Command, action: Copy }
- { key: Q, mods: Command, action: Quit }
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: Return, mods: Command, action: ToggleFullscreen }
- { key: Home, chars: "\x1bOH", mode: AppCursor }
- { key: Home, chars: "\x1b[H", mode: ~AppCursor }
- { key: End, chars: "\x1bOF", mode: AppCursor }
- { key: End, chars: "\x1b[F", mode: ~AppCursor }
- { key: Equals, mods: Command, action: IncreaseFontSize }
- { key: Minus, mods: Command, action: DecreaseFontSize }
- { key: Minus, mods: Command|Shift, action: ResetFontSize }
- { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }
- { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
- { key: PageUp, chars: "\x1b[5~" }
- { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }
- { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
- { key: PageDown, chars: "\x1b[6~" }
- { key: Left, mods: Shift, chars: "\x1b[1;2D" }
- { key: Left, mods: Control, chars: "\x1b[1;5D" }
- { key: Left, mods: Alt, chars: "\x1b[1;3D" }
- { key: Left, chars: "\x1b[D", mode: ~AppCursor }
- { key: Left, chars: "\x1bOD", mode: AppCursor }
- { key: Right, mods: Shift, chars: "\x1b[1;2C" }
- { key: Right, mods: Control, chars: "\x1b[1;5C" }
- { key: Right, mods: Alt, chars: "\x1b[1;3C" }
- { key: Right, chars: "\x1b[C", mode: ~AppCursor }
- { key: Right, chars: "\x1bOC", mode: AppCursor }
- { key: Up, mods: Shift, chars: "\x1b[1;2A" }
- { key: Up, mods: Control, chars: "\x1b[1;5A" }
- { key: Up, mods: Alt, chars: "\x1b[1;3A" }
- { key: Up, chars: "\x1b[A", mode: ~AppCursor }
- { key: Up, chars: "\x1bOA", mode: AppCursor }
- { key: Down, mods: Shift, chars: "\x1b[1;2B" }
- { key: Down, mods: Control, chars: "\x1b[1;5B" }
- { key: Down, mods: Alt, chars: "\x1b[1;3B" }
- { key: Down, chars: "\x1b[B", mode: ~AppCursor }
- { key: Down, chars: "\x1bOB", mode: AppCursor }
- { key: Tab, mods: Shift, chars: "\x1b[Z" }
- { key: F1, chars: "\x1bOP" }
- { key: F2, chars: "\x1bOQ" }
- { key: F3, chars: "\x1bOR" }
- { key: F4, chars: "\x1bOS" }
- { key: F5, chars: "\x1b[15~" }
- { key: F6, chars: "\x1b[17~" }
- { key: F7, chars: "\x1b[18~" }
- { key: F8, chars: "\x1b[19~" }
- { key: F9, chars: "\x1b[20~" }
- { key: F10, chars: "\x1b[21~" }
- { key: F11, chars: "\x1b[23~" }
- { key: F12, chars: "\x1b[24~" }
- { key: Back, chars: "\x7f" }
- { key: Back, mods: Alt, chars: "\x1b\x7f" }
- { key: Insert, chars: "\x1b[2~" }
- { key: Delete, chars: "\x1b[3~" }
В следующей части проделаем то же самое с XTerm и Hyper. А также настроим Tmux и Vim.
Ссылки
Сравнение эмуляторов терминала на Slant
Alacritty.yml для примера
Темы на Alacritty
tmnhy
Все 3 «терминала» из статьи — эмуляторы терминала.
Нет важного уточнения, для каких задач «недостаточно быстрый и удобный»?
Вопрос «зачем» не раскрыт.
Username77177 Автор
Подредактировал. Спасибо за уточнение.