Windows Terminal - новый взгляд на старые вещи

  • Автор:

windows-terminal-000.pngКазалось бы, что может быть более неизменным, нежели Командная строка Windows? Это приложение, словно живое ископаемое, кажется, помнит времена первых версий Windows NT и Windows 95, возможности тоже остались где-то там, в далеких и светлых днях. То, что терминал нужно менять было понятно еще давно, но не было понятно как. Ведь терминальные приложения в современных ОС это не только командная строка, но и PowerShell, и консоли WSL. Но Microsoft отлично справилась с этой проблемой, новое приложение Windows Terminal способно не только объединить все в одном месте, но и существенно расширить возможности привычных оболочек.

Взаимоотношения Windоws и командной строки долгое время были достаточно прохладными. Основная парадигма управления системой строилась вокруг графических инструментов и мыши, а командная строка рассматривалась как дополнительный атрибут и инструмент восстановления. Ни о каком полноценном управлении системой через терминал речи не шло, даже для автоматизации предлагался отдельный скриптовый язык VBScript.

Все стало меняться с выходом PowerShell и появлением Core-версий Windows - постепенно Microsoft стала осознавать важность консольного инструмента для управления системой, и чаша весов снова качнулась в другую сторону, сегодня ряд продуктов не имеют полноценных графических инструментов настройки, зато предлагают для этого PowerShell. Подсистема Windows для Linux также не предполагает никаких графических инструментов, снова напоминая о том, что терминал не пережиток прошлого, а мощный и удобный инструмент.

Windows Terminal - это современное приложение, демонстрирующее новый взгляд Microsoft на старые вещи, причем не только новый, но и достаточно неожиданный. Это свободное ПО под лицензией MIT исходные коды которого расположены на GitHub и принять участие в его разработке может каждый. Как видим, времена действительно меняются, и компания, еще недавно называвшая открытое ПО "раковой опухолью" теперь выпускает под открытой лицензией один из основных инструментов администрирования.

Продукт доступен в двух версиях: стабильной Windows Terminal и версии для разработчиков и инсайдеров Windows Terminal Preview. Последняя получает все новые функции непосредственно после их разработки и является наиболее интересной и в дальнейшем мы будем рассматривать именно ее.

Рекомендованным способом получения приложения является Microsoft Store, но также возможны и альтернативные методы установки, более подробно о них можно узнать на странице GitHub.

windows-terminal-001.pngПосле установки приложении автоматически добавит профили для всех установленных в системе консольных приложений Windows и WSL, а также будет их автоматически регистрировать при добавлении в систему, например, если вы установите новую версию PowerShell или новый экземпляр Linux в WSL. Кроме того, отдельно добавляется профиль для Azure Cloud Shell. Профилем по умолчанию является встроенный в систему Windows Power Shell.

windows-terminal-002.pngПриятные новшества радуют с первых секунд работы с новым терминалом. Во-первых, это вкладки, теперь ничего не мешает удобно организовать рабочее пространство и не путаться в мешанине окон. Во-вторых - это рендеринг текста поддержкой ускорения на GPU, что дает отличную прорисовку шрифтов и делает текст визуально привлекательным.

windows-terminal-003.pngК сожалению графической оболочки для настройки терминала пока нет, при выборе пункта Параметры будет открыт JSON-файл с настройками, однако это не должно пугать любителя командной строки. В конфигурационном файле сначала идут глобальные параметры, а затем описания профилей. Структура достаточно простая и не должна вызвать особых сложностей.

Прежде всего переопределим командную оболочку по умолчанию. Для этого найдите guid нужного профиля и скопируйте его в опцию defaultProfile:

defaultProfile": "{574e775e-4f2a-5b96-acle-a2962a402336}",

Затем включим привычное Linux-пользователям поведение, когда текст копируется при его выделении и потом может быть вставлен правым кликом мыши:

copyOnSelect": true,

Перейдем к самим профилям. Их настройки достаточно просты и очевидны: это guid, наименование, источник или командная строка запуска и видимость. Если вы не хотите видеть профиль в списке выбора, то просто установите опцию hidden в true, мы таким образом скрыли оболочку Azure.

hidden": true,

windows-terminal-004.pngВсе изменения применяются налету, перезапускать терминал не нужно.

Еще одной долгожданной особенностью являются панели, позволяющие разделить окно терминала на несколько областей. Для разделения по горизонтали нажмите Alt+Shift++, для разделения по вертикали Alt+Shift+-, чтобы закрыть панель используйте Ctrl+Shift+W. При этом в новой панели будет открыта командная оболочка по умолчанию. Чтобы открыть в панели другой профиль просто выберите его из списка с зажатой клавишей Alt. Для дублирования текущего профиля нажмите Alt+Shift+D. В заголовке вкладки будет отображаться наименование текущей панели.

windows-terminal-005.png

Для изменения размера панелей используйте клавиши со стрелками одновременно зажав Alt + Shift, при этом будет меняться размер активной панели.

windows-terminal-006.png

Терминал поддерживает практически полную кастомизацию. Можно изменять цвет, шрифт, фоновое изображение, прозрачность панелей, задавать иконки, также поддерживаются темы, включающие множество настроек для различных вариантов отображения. Мы не будем углубляться так далеко, большее количество настроек можно найти в документации: https://docs.microsoft.com/ru-ru/windows/terminal/get-started.

Но некоторые настройки мы все-же сделаем. По умолчанию все панели выглядят одинаково, что может приводить к некоторой путанице, поэтому есть смысл изменить цвет фона, чтобы быстро понимать, где какая консоль запущена, для этого добавьте в профиль опцию background с шестнадцатеричным кодом цвета, например, "родной" цвет для PowerShell:

"background": "#012456",

Мы указали для разных консолей привычные цвета и сразу стало гораздо удобнее:

windows-terminal-007.pngТакже очень легко можно создавать свои профили. Допустим мы хотим добавить в терминал подключение по SSH к одному из своих Linux-серверов. Прежде всего для нового профиля нужно получить guid, для этого в среде PowerShell выполните:

[guid]::NewGuid()

windows-terminal-008.pngТеперь добавим в конфигурационный файл секцию нового профиля:

{
"guid": "{437dc877-4e9d-405a-8c86-837093861986}",
"name": "Debian 1C Server",
"commandline": "ssh andrey@192.168.233.141",
"icon": "ms-appdata:///roaming/icons8-console-32.png",
"hidden": false
},

Синтаксис довольно прост, но поясним некоторые параметры. Опция commandline указывает строку запуска, а в опции icon мы задали индивидуальную иконку профиля, для этого можно использовать как ico-файлы, так и обычные png. Иконку следует разместить в специальной директории, для Windows Terminal это:

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\RoamingState

Для Windows Terminal Preview:

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\RoamingState

После чего к ним можно будет обращаться как:

ms-appdata:///roaming/имя_файла

windows-terminal-009.pngПодобным образом можно добавлять неограниченное число профилей на все случаи жизни и практически к любому приложению. Например. мы создали еще один профиль для работы с командной строкой PostgreSQL, для этого мы заглянули в "родной" bat-файл для запуска и позаимствовали оттуда строку запуска:

{
"guid": "{5507e755-60ae-4d8e-aa01-e75da98b95c8}",
"name": "PSQL Shell",
"commandline": "C:\\Program Files\\PostgreSQL 1C\\10\\bin\\psql.exe -h localhost -U postgres -d postgres -p 5432",
"icon": "ms-appdata:///roaming/PostgreSQL_logo.png",
"hidden": false
}

Обратите внимание, если это последний профиль в списке, то запятая после закрывающей фигурной скобки не ставится.

windows-terminal-010.pngВ заключение хочется сказать, что новый Windows Terminal нам очень понравился и мы рекомендуем всем, кто еще не пробовал, попробовать работу с ним. Это действительно новый подход Microsoft к старым и привычным вещам и на этот раз у них действительно получилось современное, удобное и динамично развивающееся приложение.