Bảng điều khiển Windows với xử lý màu ANSI


34

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?

Chúng tôi sử dụng rspec và một phần trong nhóm của chúng tôi sử dụng Windows và chuỗi đặc biệt để tô màu không hữu ích cho họ;).

Câu trả lời:


40

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.

ConEmu và ANSI X3.64 / Xterm 256 màu


1
Những hòn đá này ! Là một game thủ, tôi thích tính năng trận động đất. Tuy nhiên, bảng điều khiển dường như bị khóa ở phía trên màn hình (ngay cả khi tùy chọn bị khóa ở trên cùng bị vô hiệu hóa). Cảm ơn
Ced

Làm thế nào để bạn chạy cmd với các tab?
Mikey

@Mikey là gì? Đọc câu trả lời trước.
Maximus

35

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/setconsolemode

Khi 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 echolệnh (hoặc có lẽ là phần xử lý hàng loạt của CMD.EXEhoặ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 stdinhoặc stdoutcó 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\VirtualTerminalLevelthiế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 DWORDkhóa (nếu cần) và đặt giá trị của nó 1thành bật toàn cầu (hoặc 0vô 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.

nhập mô tả hình ảnh ở đây


21

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ể:

hình ảnh từ trang MSDN được đề cập dưới đây

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ờ GetConsoleModeSetConsoleMode để đị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 .


2
Các trình tự được hỗ trợ được mô tả tại msdn.microsoft.com/en-us/l
Library / windows / desktop / từ

Bạn cũng có thể thay đổi màu mặc định bằng Colortool . Các bản cài đặt Windows 10 mới sẽ có các màu được sửa đổi một chút, dễ đọc hơn (đặc biệt là màu xanh lam trên nền đen), nhưng các bản cập nhật sẽ giữ các màu cũ, khó đọc.

10

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.

Tài liệu MSDN

Bản giới thiệu

nhập mô tả hình ảnh ở đây

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

Kể từ phiên bản 1607 (OS Build 14393.693), màu trong Windows 10 đã bị tắt.
geff_chang

2
Tại sao tôi nên tin điều đó? Sự thật xin vui lòng. a) Không có gì trong thay đổi: support.microsoft.com/en-us/help/4009938 b) Hoạt động với tôi: imgur.com/a/MNPNm
Jens A. Koch

1
Tôi không chắc chắn trong phiên bản Win10 chính xác, nhưng nó được đề cập ở đây: github.com/symfony/symfony/issues/19520 Trên máy tính xách tay của công ty tôi - Ver 1511 (OS Build 10586.753) - Tôi không cần nó. Trên PC ở nhà, tôi phải sử dụng ansicon, vì các màu không được bật theo mặc định.
geff_chang

4
Họ chỉ giới thiệu một cờ, điều khiển đầu ra có màu và sai theo mặc định. Xem wpdev.uservoice.com/forums/ ( )) Symfony đang sử dụng PHP.exe trên Windows, nơi cờ bị tắt, vì vậy họ phải chờ một bản vá, hạ cánh tại đây: github.com/php/php- src / kéo / 2103 . Tình hình giải quyết. --- Đối với cmd.exe, cờ luôn đúng. Đó là lý do tại sao bạn có hỗ trợ màu trên bảng điều khiển.
Jens A. Koch

1
những mã này cũng hoạt động trong một tập lệnh shell trong linux? hoặc được thực hiện một cách khác nhau?
Mikey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.