Консоль Windows с обработкой цветов ANSI

18978
mrzasa

Есть ли консольный эмулятор для Windows, который интерпретирует раскраску ANSI?

Мы используем rspec, а часть нашей команды - Windows, и специальная строка для раскраски для них не очень полезна;).

25

4 ответа на вопрос

36
Maximus

ConEmu supports ANSI X3.64 with Xterm 256 color extension. I'm the author of this console emulator.

Ansi sequences are handled for all processes, running in ConEmu tabs.

AFAIK, ConEmu supports more codes, than Ansicon.

ConEmu and ANSI X3.64 / Xterm 256 colors

Это скалы! Как игрок, я люблю функцию Quake. Однако консоль заблокирована в верхней части экрана (даже если опция заблокирована в верхней части экрана отключена). Спасибо Ced 8 лет назад 1
как вы запускаете cmd с вкладками? Mikey 6 лет назад 0
@ Микки Что? Сначала прочитайте ответ. Maximus 6 лет назад 0
22
rolve

Начиная с Windows 10 TH2 (v1511), conhost.exe(и, как следствие, cmd.exe) поддерживаются Escape-последовательности ANSI, в частности цвета:

изображение со страницы MSDN, упомянутой ниже

Страница MSDN о последовательностях виртуального терминала консоли объясняет, какие последовательности поддерживаются и как их включить:

Вы можете использовать флаги GetConsoleMode и SetConsoleMode для настройки этого поведения. [...]

Поведение следующих последовательностей основано на VT100 и производных технологиях эмулятора терминала, наиболее конкретно эмулятор терминала xterm. Более подробную информацию о терминальных последовательностях можно найти по адресу http://vt100.net и по адресу http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .

Поддерживаемые последовательности описаны по адресу https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx dbenham 7 лет назад 2
Вы также можете изменить цвета по умолчанию, используя [Colortool] (https://blogs.msdn.microsoft.com/commandline/2017/08/11/introduction-the-windows-console-colortool/). Новые установки Windows 10 получат слегка измененные цвета, которые легче читать (особенно синий на черном), но обновления сохранят старые, трудно читаемые цвета. user128216 5 лет назад 0
20
Glenn Slayden

Ни в одном из ответов на этой странице не упоминается важный аспект новой поддержки ANSI Terminal Control, которая была добавлена ​​на консольный хост Windows 10 в сборке 16257 (и более поздних версиях). А именно, он не включен по умолчанию. Если указанное программное обеспечение вы используете не позволяет обрабатывать ANSI, вызвав SetConsoleMode API с ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)флагом, вы не будете видеть цвета или получить обработку ANSI для этого приложения.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

При записи с помощью WriteFile или WriteConsole символы анализируются для VT100 и аналогичных последовательностей управляющих символов, которые управляют движением курсора, режимом цвета / шрифта и другими операциями, которые также могут выполняться через существующие API-интерфейсы консоли. Для получения дополнительной информации см. Последовательности виртуального терминала консоли.

Я предполагаю, что причина примеры, приведенные на этой странице работы является то, что, по- видимому, echoкоманда (или, возможно, пакетная обработка часть CMD.EXEили conhost) позволяет обрабатывать ANSI путем вызова API только что упомянул. Но многие другие инструменты или исполняемые файлы, которые пишут stdinили stdoutмогут не делать этого, в этом случае вы не увидите цвет для этих процессов.

К счастью, глобальное значение по умолчанию может быть изменено с opt-in на opt-out . Раздел реестра at HKEY_CURRENT_USER\Console\VirtualTerminalLevelзадает глобальное поведение по умолчанию для обработки управляющих последовательностей ANSI. Создайте DWORDключ (при необходимости) и установите его значение равным 1глобальному включению (или 0отключению`) обработки ANSI по умолчанию.

[HKEY_CURRENT_USER \ Console] "VirtualTerminalLevel" = DWORD: 00000001

Обратите внимание, что этот параметр реестра управляет значением по умолчанию, что означает, что он влияет только на консольные приложения, которые явно не манипулируют консольным режимом путем вызова SetConsoleMode(...). Из этого следует, что, хотя значение реестра может помочь включить ANSI для приложений, не обращающих внимания на режим консоли, оно не повлияет на любое приложение, ориентированное на режим консоли, которое (по некоторым причинам) может явно отключить ANSI.

enter image description here

10
Jens A. Koch

Есть ли консольный эмулятор для Windows, который интерпретирует раскраску ANSI?

Windows до 10 - нет встроенной поддержки цветов ANSI на консоли

Для версии Windows ниже 10 консоль Windows не поддерживает раскраску по умолчанию. Вы можете установить Cmder, ConEmu, ANSICON или Mintty (используется по умолчанию в GitBash и Cygwin), чтобы добавить поддержку окраски в командную консоль Windows.

Windows 10 - цвета командной строки

Начиная с Windows 10, консоль Windows по умолчанию поддерживает последовательности выхода ANSI и некоторые цвета.

Документация MSDN

демонстрация

enter image description here

Пакетная команда

Это win10colors.cmdбыло написано Микеле Локати :

@echo off cls echo [101;93m STYLES [0m echo ^<ESC^>[0m [0mReset[0m echo ^<ESC^>[1m [1mBold[0m echo ^<ESC^>[4m [4mUnderline[0m echo ^<ESC^>[7m [7mInverse[0m echo. echo [101;93m NORMAL FOREGROUND COLORS [0m echo ^<ESC^>[30m [30mBlack[0m (black) echo ^<ESC^>[31m [31mRed[0m echo ^<ESC^>[32m [32mGreen[0m echo ^<ESC^>[33m [33mYellow[0m echo ^<ESC^>[34m [34mBlue[0m echo ^<ESC^>[35m [35mMagenta[0m echo ^<ESC^>[36m [36mCyan[0m echo ^<ESC^>[37m [37mWhite[0m echo. echo [101;93m NORMAL BACKGROUND COLORS [0m echo ^<ESC^>[40m [40mBlack[0m echo ^<ESC^>[41m [41mRed[0m echo ^<ESC^>[42m [42mGreen[0m echo ^<ESC^>[43m [43mYellow[0m echo ^<ESC^>[44m [44mBlue[0m echo ^<ESC^>[45m [45mMagenta[0m echo ^<ESC^>[46m [46mCyan[0m echo ^<ESC^>[47m [47mWhite[0m (white) echo. echo [101;93m STRONG FOREGROUND COLORS [0m echo ^<ESC^>[90m [90mWhite[0m echo ^<ESC^>[91m [91mRed[0m echo ^<ESC^>[92m [92mGreen[0m echo ^<ESC^>[93m [93mYellow[0m echo ^<ESC^>[94m [94mBlue[0m echo ^<ESC^>[95m [95mMagenta[0m echo ^<ESC^>[96m [96mCyan[0m echo ^<ESC^>[97m [97mWhite[0m echo. echo [101;93m STRONG BACKGROUND COLORS [0m echo ^<ESC^>[100m [100mBlack[0m echo ^<ESC^>[101m [101mRed[0m echo ^<ESC^>[102m [102mGreen[0m echo ^<ESC^>[103m [103mYellow[0m echo ^<ESC^>[104m [104mBlue[0m echo ^<ESC^>[105m [105mMagenta[0m echo ^<ESC^>[106m [106mCyan[0m echo ^<ESC^>[107m [107mWhite[0m echo. echo [101;93m COMBINATIONS [0m echo ^<ESC^>[31m [31mred foreground color[0m echo ^<ESC^>[7m [7minverse foreground ^<-^> background[0m echo ^<ESC^>[7;31m [7;31minverse red foreground color[0m echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m 
Начиная с версии 1607 (сборка ОС 14393.693), цвет в Windows 10 был отключен. geff_chang 7 лет назад 0
Почему я должен в это верить? Факты, пожалуйста. а) В журнале изменений ничего нет: https://support.microsoft.com/en-us/help/4009938 б) У меня работает: http://imgur.com/a/MNPNm Jens A. Koch 7 лет назад 2
Я не уверен, в какой именно версии Win10, но это упоминается здесь: https://github.com/symfony/symfony/issues/19520 На ноутбуке моей компании - Ver 1511 (сборка ОС 10586.753) - я не сделал нужно это. На моем домашнем ПК я должен был использовать ansicon, потому что цвета не были включены по умолчанию. geff_chang 7 лет назад 1
Они только что ввели флаг, который контролирует цветной вывод и по умолчанию имеет значение false. См. Https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/15617610--re-enable-enable-virtual-terminal-processing-by) --- Symfony использует PHP.exe в Windows, где флаг был отключен, поэтому им пришлось ждать патча, который появился здесь: https://github.com/php/php-src/pull/2103. Ситуация разрешилась. --- Для cmd.exe флаг верен всегда. Вот почему у вас есть поддержка цвета на консоли. Jens A. Koch 7 лет назад 4
эти коды будут работать в сценарии оболочки в Linux тоже? или это сделано по-другому? Mikey 6 лет назад 1
@Mikey http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html Elder Geek 6 лет назад 0
@ ElderGeek это вряд ли ответ на его вопрос. Он задается вопросом (я думаю), являются ли эти escape-последовательности одинаковыми в разных средах. Я тоже, просто да или нет сработало бы, но мне все равно, чтобы различать две среды :) Adam Plocher 6 лет назад 0
@AdamPlocher ИМХО, лучше научить человека ловить рыбу, чем дать ему рыбу. С каких это пор комментарий является ответом? Elder Geek 6 лет назад 0
@geff_chang Отличное объяснение изменений в поведении Windows 10 можно найти по адресу https://github.com/Microsoft/WSL/issues/1173#issuecomment-254250445. Glenn Slayden 6 лет назад 0