Консоль Windows з обробкою кольорів ANSI


31

Чи є консольний емулятор для Windows, який інтерпретує фарбування ANSI?

Ми використовуємо rspec, а частина нашої команди використовує Windows, а спеціальна рядок для фарбування для них не дуже корисна;).

Відповіді:


37

ConEmu підтримує ANSI X3.64 з кольоровим розширенням Xterm 256. Я автор цього емулятора консолі.

Послідовності Ansi обробляються для всіх процесів, що працюють на вкладках ConEmu.

AFAIK, ConEmu підтримує більше кодів, ніж Ansicon.

ConEmu та ANSI X3.64 / Xterm 256 кольорів


1
Це скелі! Як геймер, я люблю функцію землетрусу. Схоже, консоль заблокована вгорі екрана (навіть якщо параметр заблоковано вгорі). Спасибі
CED

як запускати cmd за допомогою вкладок?
Майкі

@Mikey Що? Прочитайте спочатку відповідь.
Максим

30

Жоден з відповідей на цій сторінці не згадує важливий аспект нової підтримки ANSI Terminal Control, яка була додана до хоста консолі Windows 10 у збірці 16257 (і пізнішої версії). А саме, це за замовчуванням n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ . Якщо конкретне програмне забезпечення, яке ви використовуєте, не дозволяє обробляти ANSI, викликаючи API SetConsoleMode з 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 , щоб відмовитися від . Ключ реєстру HKEY_CURRENT_USER\Console\VirtualTerminalLevelвстановлює глобальну поведінку за замовчуванням для обробки послідовностей аварійних передач ANSI. Створіть DWORDключ (якщо необхідно) і встановіть його значення, 1щоб глобально включити (або 0відключити `) обробку ANSI за замовчуванням.

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

Зауважте, що цей параметр реєстру керує за замовчуванням , тобто означає, що він впливає лише на консольні програми, які не маніпулюють явно консольним режимом шляхом виклику SetConsoleMode(...). Звідси випливає, що, хоча значення реєстру може допомогти включити ANSI для прихованих у консольному режимі додатків, це не вплине на будь -які додаткові програми в режимі консолі, які (з якихось причин) можуть явно відключити ANSI.

введіть тут опис зображення


21

Починаючи з Windows 10 TH2 (v1511), conhost.exe(і, розширення, cmd.exe) підтримують послідовності втечі ANSI, зокрема кольори:

зображення зі згаданої нижче сторінки MSDN

Сторінка MSDN про послідовності віртуальних терміналів консолі пояснює, які послідовності підтримуються та як їх включити:

Ви можете використовувати прапори GetConsoleMode та SetConsoleMode для налаштування цієї поведінки. [...]

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


2
Підтримувані послідовності описані на сторінці msdn.microsoft.com/en-us/library/windows/desktop/…
dbenham

Ви також можете змінити кольори за замовчуванням за допомогою Colortool . Нові установки Windows 10 отримають трохи змінені кольори, які легше читати (особливо синій на чорному), але оновлення збережуть старі, важко читаються кольори.

10

Чи є консольний емулятор для Windows, який інтерпретує фарбування ANSI?

Windows до 10 - відсутність вбудованої підтримки кольорів ANSI на консолі

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

Windows 10 - Кольори командного рядка

Починаючи з Windows 10, консоль Windows підтримує послідовність втечі ANSI і деякі кольори за замовчуванням.

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

Демо

введіть тут опис зображення

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

Автор 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

2
Навіщо мені це вірити? Факти, будь ласка. а) У журналі змін нічого немає: support.microsoft.com/en-us/help/4009938 б) працює для мене: imgur.com/a/MNPNm
Jens A. Koch

1
Я не впевнений, у якій точній версії Win10, але це згадується тут: github.com/symfony/symfony/isissue/19520 На моєму ноутбуці компанії - Ver 1511 (Build Build 10586.753) - мені це не потрібно. На домашньому ПК мені довелося використовувати ансікон, оскільки кольори за замовчуванням не були включені.
geff_chang

4
Вони щойно ввели прапор, який контролює кольоровий вихід і за замовчуванням є false. Дивіться wpdev.uservoice.com/forums/… ) --- Symfony використовує PHP.exe у Windows, де прапор вимкнений, тому їм довелося чекати виправлення, яке приземлилося тут: github.com/php/php- src / тягнути / 2103 . Ситуація вирішена. --- Для cmd.exe прапор вірний завжди. Ось чому у вас є підтримка кольорів на консолі.
Єнс А. Кох

1
Чи будуть ці коди працювати і в скрипті оболонки в Linux? чи це зроблено по-іншому?
Майкі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.