Câu trả lời:
ConEmu hỗ trợ ANSI X3.64 với phần mở rộng màu Xterm 256. Tôi là tác giả của trình giả lập giao diện điều khiển này.
Trình tự Ansi được xử lý cho tất cả các quy trình, chạy trong tab ConEmu.
AFAIK, ConEmu hỗ trợ nhiều mã hơn Ansicon.
Không có câu trả lời nào trên trang này đề cập đến một khía cạnh quan trọng của hỗ trợ mới cho ANSI Terminal Control đã được thêm vào máy chủ bảng điều khiển Windows 10 trong bản dựng 16257 (và phiên bản mới hơn). Cụ thể, theo mặc định , đó là n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ . Trừ khi phần mềm cụ thể bạn đang sử dụng cho phép xử lý ANSI bằng cách gọi API SetConsoleMode bằng ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
cờ, bạn sẽ không nhìn thấy màu sắc hoặc nhận xử lý ANSI cho ứng dụng đó.
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemodeKhi viết bằng WriteFile hoặc WriteConsole , các ký tự được phân tích cú pháp cho VT100 và các chuỗi ký tự điều khiển tương tự điều khiển chuyển động con trỏ, chế độ màu / phông chữ và các hoạt động khác cũng có thể được thực hiện thông qua API Console hiện có. Để biết thêm thông tin, hãy xem Trình tự thiết bị đầu cuối ảo.
Tôi đoán lý do các ví dụ hiển thị trên trang này hoạt động là vì, rõ ràng echo
lệnh (hoặc có lẽ là phần xử lý hàng loạt của CMD.EXE
hoặc conhost
) cho phép xử lý ANSI bằng cách gọi API vừa được đề cập. Nhưng nhiều công cụ hoặc tệp thực thi khác ghi stdin
hoặc stdout
có thể không làm điều này, trong trường hợp đó bạn sẽ không thấy màu cho các quy trình đó.
May mắn thay, mặc định toàn cầu có thể được thay đổi từ opt-in để opt-out . Khóa sổ đăng ký tại HKEY_CURRENT_USER\Console\VirtualTerminalLevel
thiết lập hành vi mặc định toàn cầu để xử lý các chuỗi thoát ANSI. Tạo một DWORD
khóa (nếu cần) và đặt giá trị của nó 1
thành bật toàn cầu (hoặc 0
vô hiệu hóa `) xử lý ANSI theo mặc định.
[HKEY_CURRENT_USER \ Bảng điều khiển] "VirtualTerminalLevel" = dword: 00000001
Lưu ý rằng cài đặt đăng ký này kiểm soát mặc định , có nghĩa là nó chỉ ảnh hưởng đến các ứng dụng bảng điều khiển không thao tác rõ ràng chế độ bảng điều khiển bằng cách gọi SetConsoleMode(...)
. Theo sau, mặc dù giá trị đăng ký có thể giúp kích hoạt ANSI cho các ứng dụng không biết chế độ bảng điều khiển , nhưng nó sẽ không có tác dụng đối với bất kỳ ứng dụng hiểu biết về chế độ bảng điều khiển nào (vì một lý do nào đó) có thể vô hiệu hóa rõ ràng ANSI.
Bắt đầu từ Windows 10 TH2 (v1511), conhost.exe
(và, bằng phần mở rộng, cmd.exe
) hỗ trợ Chuỗi thoát ANSI, với các màu cụ thể:
Các trang MSDN về Virtual Console ga Trình tự giải thích những gì trình tự được hỗ trợ và làm thế nào để giúp họ:
Bạn có thể sử dụng cờ GetConsoleMode và SetConsoleMode để định cấu hình hành vi này. [...]
Hành vi của các chuỗi sau dựa trên VT100 và các công nghệ giả lập thiết bị đầu cuối có nguồn gốc, cụ thể nhất là trình giả lập thiết bị đầu cuối xterm. Thông tin thêm về trình tự đầu cuối có thể được tìm thấy tại http://vt100.net và tại http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .
Có trình giả lập giao diện điều khiển nào cho Windows diễn giải màu ANSI không?
Windows trước 10 - không hỗ trợ riêng cho màu ANSI trên bảng điều khiển
Đối với phiên bản Windows dưới 10, bảng điều khiển lệnh Windows không hỗ trợ tô màu đầu ra theo mặc định. Bạn có thể cài đặt Cmder , ConEmu , ANSICON hoặc Mintty (được sử dụng theo mặc định trong GitBash và Cygwin) để thêm hỗ trợ tô màu cho bảng điều khiển lệnh Windows của bạn.
Windows 10 - Màu dòng lệnh
Bắt đầu từ Windows 10, bảng điều khiển Windows hỗ trợ Trình tự thoát ANSI và một số màu theo mặc định.
Bản giới thiệu
Lệnh hàng loạt
Các win10colors.cmd
đã được viết bởi Michele về vị trí :
@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