Итак, буквально через пару дней кончается 2017 год. Время рейтингов, подведения итогов и прочего стандартного булшита. Предлагаю в этот раз поговорить о самом насущном, о том, чем приходится пользоваться каждый день — о Терминалах. Что же у нас есть среди Terminal Emulator для Windows?
Изначально эта прекрасная операционная система шипится с двумя Терминалами — старым COMMAND.COM (стандартный вмеми известный cmd.exe), а также новым PowerShell.

Думаю, каждый, кто хоть немного работал за Windows, сможет назвать минусы и минусы этих терминальчиков. Это и практически полное отсутствие конфигурации, это и отсутствие многих фич, которые везде есть буквально из коробки (напимер, tab-ы, или статусный бар). Кроме того, тут нет таких важный вещей, как стандартный набор linux-тулзов (posix). Точнее так, часть tools есть, но они совсем не соответствуют стандарту, имеют своё уникальное поведение и набор принимаемых аргументов.

С точки зрения развития и общего UI/UX PowerShell, на самом деле, не так плох. Его действительно используют люди. Но это обычно это те, кто никогда не работал за Линуксами, и кто попросту привык к тем командам, которые тут есть. Anyway, этот терминал далёк от iTerm 2 — лучшего в мире терминалов.
Какие же есть альтернативы? На самом деле, в первую очередь нужно понять для себя, какую реализацию posix утилит мы хотим: либо это Cygwin (или аналог), либо это божественная Linux Subsystem, которая появилась в 2016 году в Десятке. Наверное, сейчас уже и выбор особо никакой не стоит. Если у вас Windows 10 — вы выбираете встроенную реализацию, иначе — Cygwin.
После выбора ядра Терминала, стоит посмотреть на визуальную реализацию. Наверное, можно сказать, что в 2017 году есть 3-4 достойных терминала. Это ConEmu, это Cmder, это Babun, и это Hyper™.

ConEmu — это, наверное, самая старая попытка реализовать внешний Терминал для Винды. В качестве реализации Linux-утилит классически используется Cygwin. Из плюсов можно отметить то, что это как-то работает. Есть все популярные фичи терминалов. Но… ConEmu не очень приятно пользоваться. При работе то и время замечаешь за собой, что пользуешься не «встроенной нативной программой», а чем-то на коленке написанным. Вечно присутствуют какие-то визуальные лаги и баги отображения текста в консоли. Я пытался использовать ConEmu лет 5 назад. Не смог.

Cmder — это логическое развитие ConEmu. Командер базируется на Конему, но тут проделано много дополнительной работы. В частности, были полечены баги в отображение текста, улучшена световая схема, добавлены некоторые фичи. Сам я командером никогда не пользовался, но, по отзывам, этот терминал одназначно входит в двойку лучших. Кстати, Cmder может работать, как с тулами из Cygwin, так и с тулами из Linux Subsystem.

Hyper — это то, чем я пользуюсь, когда работаю за Windows. Мне посоветовал этот терминал коллега. Сначала я был крайне недоверчев к консоли, которая написана на Электроне (javascript). Я думал, что это будет лагать просто, как не в себя. Отчасти так и было в первой версии редактора, когда Хайпер использовал hterm внутри себя. Но теперь, когда Hyper перешёл на xterm.js, всё стало просто замечательно.
Чем прекрасен этот терминал? Причин несколько. Во-первых, тут нет лагов (если говорить про ядро xterm.js). Во-вторых, у этой консоли изумительный дизайн (на сколько я не привередлив к этому, тут это просто цепляет). Кроме того, у данного Терминала бесконечное количество фич: в Хайпер встроена масса стандартных функций, но если и их вам будет мало, тут есть поддержка плагинов, которые активно разрабатываются сообществом.
Пожалуй, покажу, как я использую этот Терминал. В конфиге нет ничего особенного. Просто увеличен размер шрифтов, увеличен размер терминала. Кроме того, Линуксовый bash используется в качестве Shell по умолчанию, а также подключена iTerm2 визуальная тема. Важно, что используется canary ветка, которая необходима для включения xterm.js.
// Future versions of Hyper may add additional config options,
// which will not automatically be merged into this file.
// See https://hyper.is#cfg for all currently supported options.
module.exports = {
config: {
// Choose either "stable" for receiving highly polished,
// or "canary" for less polished but more frequent updates
updateChannel: 'canary',
// default font size in pixels for all tabs
fontSize: 18,
windowSize: [1000, 580],
// font family with optional fallbacks
fontFamily: 'Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace',
// terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk)
cursorColor: 'rgba(248,28,229,0.8)',
// `BEAM` for |, `UNDERLINE` for _, `BLOCK` for █
cursorShape: 'BLOCK',
// set to true for blinking cursor
cursorBlink: false,
// color of the text
foregroundColor: '#fff',
// terminal background color
backgroundColor: '#000',
// border color (window, tabs)
borderColor: '#333',
// custom css to embed in the main window
css: '',
// custom css to embed in the terminal window
termCSS: '',
// set to `true` (without backticks) if you're using a Linux setup that doesn't show native menus
// default: `false` on Linux, `true` on Windows (ignored on macOS)
showHamburgerMenu: '',
// set to `false` if you want to hide the minimize, maximize and close buttons
// additionally, set to `'left'` if you want them on the left, like in Ubuntu
// default: `true` on windows and Linux (ignored on macOS)
showWindowControls: '',
// custom padding (css format, i.e.: `top right bottom left`)
padding: '12px 14px',
// the full list. if you're going to provide the full color palette,
// including the 6 x 6 color cubes and the grayscale map, just provide
// an array here instead of a color map object
colors: {
black: '#000000',
red: '#ff0000',
green: '#33ff00',
yellow: '#ffff00',
blue: '#0066ff',
magenta: '#cc00ff',
cyan: '#00ffff',
white: '#d0d0d0',
lightBlack: '#808080',
lightRed: '#ff0000',
lightGreen: '#33ff00',
lightYellow: '#ffff00',
lightBlue: '#0066ff',
lightMagenta: '#cc00ff',
lightCyan: '#00ffff',
lightWhite: '#ffffff'
},
// the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
// if left empty, your system's login shell will be used by default
//
// Windows
// - Make sure to use a full path if the binary name doesn't work
// - Remove `--login` in shellArgs
//
// Bash on Windows
// - Example: `C:\\Windows\\System32\\bash.exe`
//
// Powershell on Windows
// - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
shell: 'C:\\Windows\\System32\\bash.exe',
// for setting shell arguments (i.e. for using interactive shellArgs: ['-i'])
// by default ['--login'] will be used
shellArgs: ['--login'],
// for environment variables
env: {},
// set to false for no bell
bell: 'SOUND',
// if true, selected text will automatically be copied to the clipboard
copyOnSelect: false
// if true, on right click selected text will be copied or pasted if no
// selection is present (true by default on Windows)
// quickEdit: true
// URL to custom bell
// bellSoundURL: 'http://example.com/bell.mp3',
// for advanced config flags please refer to https://hyper.is/#cfg
},
// a list of plugins to fetch and install from npm
// format: [@org/]project[#version]
// examples:
// `hyperpower`
// `@company/project`
// `project#1.0.1`
plugins: [
"hyper-adventure-time"
],
// in development, you can create a directory under
// `~/.hyper_plugins/local/` and include it here
// to load it and avoid it being `npm install`ed
localPlugins: [],
keymaps: {
// Example
// 'window:devtools': 'cmd+alt+o',
}
};
А какой терминал используете вы? Будет интересно узнать, как выживают люди на Windows.
Категории: Программирование