คอนโซล Windows พร้อมการจัดการสี ANSI


34

มีคอนโซลอีมูเลเตอร์สำหรับ Windows ที่ตีความ ANSI ระบายสีหรือไม่

เราใช้ rspec และส่วนหนึ่งของทีมของเราใช้ Windows และสตริงพิเศษสำหรับการระบายสีไม่ได้มีประโยชน์มากสำหรับพวกเขา;)

คำตอบ:


40

ConEmuรองรับ ANSI X3.64 พร้อมส่วนขยายสี Xterm 256 ฉันเป็นผู้เขียนโปรแกรมจำลองคอนโซลนี้

ลำดับ Ansi ได้รับการจัดการสำหรับกระบวนการทั้งหมดที่ทำงานในแท็บ ConEmu

AFAIK, ConEmu รองรับรหัสได้มากกว่า Ansicon

ConEmu และ ANSI X3.64 / Xterm 256 สี


1
หินนี้! ในฐานะนักเล่นเกมฉันชอบคุณสมบัติการสั่นสะเทือน คอนโซลดูเหมือนว่าจะถูกล็อคที่ด้านบนของหน้าจออย่างไรก็ตาม (แม้จะมีตัวเลือกที่ถูกล็อคด้านบนปิดการใช้งาน) ขอบคุณ
Ced

คุณเรียกใช้ cmd ด้วยแท็บอย่างไร
กี้

@ Mikey อะไร อ่านคำตอบก่อน
Maximus

35

ไม่มีคำตอบในหน้านี้ที่พูดถึงสิ่งสำคัญของการรองรับใหม่สำหรับANSI Terminal Controlซึ่งเพิ่มไปยังโฮสต์คอนโซลWindows 10ในบิลด์ 16257 (และใหม่กว่า) กล่าวคือ n it'so̲t̲ e̲n̲a̲b̲l̲e̲d̲ เป็นค่าเริ่มต้น ยกเว้นว่าซอฟต์แวร์เฉพาะที่คุณใช้เปิดใช้งานการประมวลผล 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อาจไม่ทำเช่นนั้นในกรณีนี้คุณจะไม่เห็นสีสำหรับกระบวนการเหล่านั้น

โชคดีที่เริ่มต้นทั่วโลกสามารถเปลี่ยนจากเลือกในการที่จะเลือกออก คีย์รีจิสทรีที่HKEY_CURRENT_USER\Console\VirtualTerminalLevelตั้งค่าการทำงานเริ่มต้นส่วนกลางสำหรับการประมวลผลลำดับ ANSI escape สร้างDWORDคีย์ (ถ้าจำเป็น) และตั้งค่าเป็น1เปิดใช้งาน0การประมวลผล ANSI ทั่วโลก (หรือปิดการใช้งาน `) ตามค่าเริ่มต้น

[HKEY_CURRENT_USER \ คอนโซล]
"VirtualTerminalLevel" = DWORD: 00000001

โปรดทราบว่าการตั้งค่ารีจิสทรีนี้จะควบคุมค่าเริ่มต้นซึ่งหมายความว่าจะมีผลเฉพาะกับแอพคอนโซลซึ่งไม่ได้จัดการโหมดคอนโซลโดยการโทรSetConsoleMode(...)อย่างชัดเจน ในขณะที่ค่ารีจิสตรีอาจช่วยให้เปิดใช้งาน ANSI สำหรับแอปคอนโซลแบบไม่ใส่ใจแต่จะไม่มีผลกับแอปคอนโซลโหมดที่เข้าใจซึ่ง (ด้วยเหตุผลบางอย่าง) อาจปิดใช้งาน ANSI อย่างชัดเจน

ป้อนคำอธิบายรูปภาพที่นี่


21

เริ่มต้นจาก Windows 10 TH2 (v1511), conhost.exe(และ, ตามนามสกุล, cmd.exe) รองรับ ANSI Escape Sequences ในสีเฉพาะ:

ภาพจากหน้า 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 Escape Sequences และบางสีตามค่าเริ่มต้น

เอกสาร MSDN

การสาธิต

ป้อนคำอธิบายรูปภาพที่นี่

ชุดคำสั่ง

win10colors.cmdเขียนโดยMichele Locati :

@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 (OS Build 14393.693) สีใน Windows 10 ถูกปิดใช้งาน
geff_chang

2
ทำไมฉันต้องเชื่อเช่นนั้น? โปรดข้อเท็จจริง a) ไม่มีอะไรในรายการเปลี่ยนแปลง: support.microsoft.com/en-us/help/4009938 b) ทำงานให้ฉัน: imgur.com/a/MNPNm
Jens A. Koch

1
ฉันไม่แน่ใจในรุ่น Win10 ที่แน่นอน แต่มีการกล่าวถึงที่นี่: github.com/symfony/symfony/issues/19520บนแล็ปท็อปของ บริษัท ของฉัน - Ver 1511 (OS Build 10586.753) - ฉันไม่ต้องการมัน บนพีซีที่บ้านของฉันฉันต้องใช้ ansicon เพราะสีไม่ได้เป็นค่าเริ่มต้น
geff_chang

4
พวกเขาเพิ่งแนะนำแฟล็กซึ่งควบคุมเอาต์พุตสีและเป็นเท็จโดยค่าเริ่มต้น ดูwpdev.uservoice.com/forums/ ...... ) --- Symfony กำลังใช้ PHP.exe บน Windows ที่มีการปิดธงดังนั้นพวกเขาจึงต้องรอการแก้ไขซึ่งมาที่นี่: github.com/php/php- src สถานการณ์ได้รับการแก้ไข --- สำหรับ cmd.exe การตั้งค่าสถานะเป็นจริงเสมอ นั่นเป็นเหตุผลที่คุณมีการสนับสนุนสีบนคอนโซล
Jens A. Koch

1
รหัสเหล่านี้จะทำงานในเชลล์สคริปต์ใน linux ด้วยหรือไม่ หรือว่าทำวิธีที่แตกต่างกันอย่างไร
กี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.