Я строю легкую версию библиотеки ncurses. Пока что он довольно хорошо работает с VT100-совместимыми терминалами, но консоль win32 не может распознать код \ 033
как начало последовательности escape:
# include <stdio.h>
# include "term.h"
int main(void) {
puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
return 0;
}
Снимок экрана! Что нужно сделать на уровне кода C, чтобы загрузить драйвер ANSI.SYS и распознать escape-последовательности ANSI / VT100?
[ОБНОВЛЕНИЕ] Для последней версии Windows 10 прочитайте полезный вклад @ brainslugs83, чуть ниже в комментариях к этому ответу.
В то время как для версий до Windows 10 Anniversary Update
:
ANSI.SYS имеет ограничение, которое может работать только в контексте подсистемы MS-DOS под Windows 95-Vista.
Microsoft KB101875 объясняет, как включить ANSI.SYS в командном окне, но это не относится к Windows NT . Согласно статье: мы все любим цвета, современные версии Windows не имеют такой хорошей поддержки ANSI.
Вместо этого Microsoft создала много функций, но это далеко не то, что вам нужно для работы с последовательностью побега ANSI / VT100.
Более подробное объяснение см. В статьи в Википедии:
ANSI.SYS также работает в системах, полученных из NT, для 16-битных устаревших программ, выполняемых в рамках NTVDM
Консоль Win32 изначально не поддерживает escape-последовательности ANSI вообще. Программное обеспечение, такое как Ansicon, может, однако, выступать в качестве обертки вокруг стандартной консоли Win32 и добавлять поддержку escape-последовательностей ANSI.
Так что я думаю, что ANSICON от Джейсона Гуда - это ваше решение. Он написан на C, поддерживает 32-разрядную и 64-разрядную версии Windows и [источник доступен](https://github.com / адокса / асикон).
Также я нашел какой-то другой подобный вопрос или пост, на который в конечном итоге был дан ответ, чтобы использовать ANSICON:
Начиная с Windows 10 TH2 (v1511), conhost.exe
и cmd.exe
поддерживают ANSI и VT100 Escape Sequences из коробки (хотя [они должны быть включены][1]).
Смотрите мой ответ на суперпользователя для более подробной информации.
[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032 (v = vs.85).aspx
Начиная с Windows 10, вы можете использовать ENABLE_VIRTUAL_TERMINAL_PROCESSING
, чтобы включить escape-последовательности ANSI:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v = vs.85).aspx
Для Python 2.7 следующий скрипт отлично работает для меня с Windows 10 (v1607)
import os
print '\033[35m'+'color-test'+'\033[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '\033[35m'+'color-test'+'\033[39m'+" test end"
[35mcolor-test[39m test end
color-test test end
Если ANSICON неприемлем, поскольку требует установки чего-либо в системе, это более легкое решение, которое анализирует и переводит коды ANSI в соответствующие [консольные функции Win32 API][1], такие как SetConsoleTextAttribute.
https://github.com/mattn/ansicolor-w32.c
[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073 (v = vs.85).aspx
Для окрашивания cmd вам понадобится Windows.h
и используйте SetConsoleTextAttribute ()
, более подробную информацию можно найти в http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx
На базе @ BrainSlugs83 вы можете активировать текущую версию Windows 10 через регистр с помощью этой командной строки:
REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
Мне лично нравится clink. Он не только обрабатывает коды ANSI, но и добавляет множество других функций, поэтому консоль Windows ведет себя как bash (история, обратный поиск истории, сочетания клавиш и т. Д.).):
- Редактирование той же строки, что и Bash (из библиотеки Readline GNU).
- История постоянства между сессиями.
- контекстно-чувствительное завершение ;
- исполняемые файлы (и псевдонимы).
- Справочные команды.
- Переменные среды
- сторонние инструменты; Git, Mercurial, SVN, Go и P4.
- новые сочетания клавиш ;
- Вставить из буфера обмена ( Ctrl-V ).
- Инкрементный поиск истории ( Ctrl-R / Ctrl-S ).
- Мощное завершение ( TAB ).
- Отменить ( Ctrl-Z ).
- Автоматический "кд .."( Ctrl-PgUp ).
- Расширение переменной среды ( Ctrl-Alt-E ).
- (нажмите Alt-H для многих других...)
- Сценарий завершения с Луа.
- Цветное и написанное по сценарию приглашение.
- Автоматическое отклонение "Terminate пакетное задание? "подсказка.
Ansi.sys (в папке system32) - это «драйвер MSDOS», предоставляемый как часть Windows XP, 2000 и более ранних версий NT. В 2000 и XP он находится в папке system32 (я не помню структуру более ранних версий NT). Программы, которые работают в подсистеме DOS и используют стандартный вывод, могут использовать ANSI.SYS так же, как они могли работать через MSDOS
Чтобы загрузить ansi.sys, Вы должны использовать команду device = или devicehigh = в конфигурации, так же, как в MSDOS. На Windows NT 5 (2K & XP) каждой копии подсистемы DOS может быть предоставлен отдельный файл конфигурации в pif / shortcut (использовать &"продвинутый &" кнопка) и есть файл по умолчанию под названием CONFIG.NT (также в папке system32) который используется, если pif / shortcut не указывает специальный файл конфигурации.
Когда ansi.sys загружен правильно, mem / d сообщит, что он загружен. В более ранних версиях NT вы можете и должны загрузить правильную среду DOS для загрузки ansi.sys, и ansi art будет работать в кратчайшие сроки. При Win 2K и XP загрузка ansi.sys не повлияет на вашу «поиск CMD», поскольку CMD - это не программа DOS: это 32-разрядная консольная программа Windows. По какой-то причине, которую я не понимаю, на WinXP, даже если вы загружаете фиксированную копию command.com с помощью «command.com / p», командная строка не будет включена ansi: возможно, когда вы делаете это таким образом, она только эмулирует загрузка command.com?
В любом случае, когда вы используете реальную DOS-версию command.com, ansi включается после загрузки: вы можете продемонстрировать его использование с небольшим количеством ansi art, как это:
command /c type ansiart.ans
(вот пример: http://artscene.textfiles.com/ansi/artwork/beastie.ans)
CONFIG.NT (в папке system32) содержит пример синтаксиса для загрузки драйверов устройств. Вам нужно быть администратором, чтобы редактировать этот файл по умолчанию, или вы можете сделать его копию.
В Win 2K и XP «сокращение» по умолчанию для MSDOS - это файл .PIF, а не файл .LNK. Если вы создаете файл .lnk в CMD, ты выиграл и № 39;t уметь устанавливать специальные файлы конфигурации и autoexec, он будет использовать CONFIG.NT по умолчанию. Если вы хотите использовать специальный файл конфигурации только для одного приложения DOS, Вы можете сделать копию &"MSDOS ярлык &" или вы можете сделать копию &"_default.pif" найден в вашей папке Windows.
В последнем win10 это может быть сделано с помощью SetConsoleMode (originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
. См. https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example
Может быть, ANSICON может помочь вам
Просто скачайте и извлеките файлы, в зависимости от ваших окон: 32-битный или 64-битный
Установите его с: ansicon -i
Я обнаружил, что этот инструмент работает для моей цели. Microsoft Color Tool от GitHub
Разархивируйте сжатый файл, затем откройте CMD с разрешением администрирования.
Перейдите в папку, где вы распаковываете файл в CMD
Затем выполните эту команду "colortool -b схема-имя
"
Имя схемы необходимо заменить любым из следующих параметров:
В моем случае команда будет похожа на эту "colortool -b solarized_dark.itermcolors
"
Нажмите прямо в окне консоли и выберите Свойства.
Вам не нужно менять какое-либо значение, просто нажмите «ОК», чтобы сохранить настройку. (Вы заметите, что ваш шрифт уже содержит цвета).
Затем перезапустите cmd или powerShell.
Цвет ANSI должен быть включен и работать с цветовой схемой, которую вы выбрали ранее.