มีคอนโซลอีมูเลเตอร์สำหรับ Windows ที่ตีความ ANSI ระบายสีหรือไม่
เราใช้ rspec และส่วนหนึ่งของทีมของเราใช้ Windows และสตริงพิเศษสำหรับการระบายสีไม่ได้มีประโยชน์มากสำหรับพวกเขา;)
มีคอนโซลอีมูเลเตอร์สำหรับ Windows ที่ตีความ ANSI ระบายสีหรือไม่
เราใช้ rspec และส่วนหนึ่งของทีมของเราใช้ Windows และสตริงพิเศษสำหรับการระบายสีไม่ได้มีประโยชน์มากสำหรับพวกเขา;)
คำตอบ:
ConEmuรองรับ ANSI X3.64 พร้อมส่วนขยายสี Xterm 256 ฉันเป็นผู้เขียนโปรแกรมจำลองคอนโซลนี้
ลำดับ Ansi ได้รับการจัดการสำหรับกระบวนการทั้งหมดที่ทำงานในแท็บ ConEmu
AFAIK, ConEmu รองรับรหัสได้มากกว่า Ansicon
ไม่มีคำตอบในหน้านี้ที่พูดถึงสิ่งสำคัญของการรองรับใหม่สำหรับ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 อย่างชัดเจน
เริ่มต้นจาก Windows 10 TH2 (v1511), conhost.exe
(และ, ตามนามสกุล, cmd.exe
) รองรับ ANSI Escape Sequences ในสีเฉพาะ:
หน้า MSDN เกี่ยวกับคอนโซลเสมือนลำดับนัลอธิบายถึงสิ่งที่ลำดับที่ได้รับการสนับสนุนและวิธีการเพื่อให้พวกเขา:
คุณสามารถใช้GetConsoleModeและSetConsoleModeธงในการกำหนดค่าการทำงานนี้ [ ... ]
พฤติกรรมของลำดับต่อไปนี้ขึ้นอยู่กับ VT100 และเทอร์มินัลอีมูเลเตอร์เทคโนโลยีที่ได้รับซึ่งส่วนใหญ่เป็นเทอร์มินัลอีมูเลเตอร์ xterm ข้อมูลเพิ่มเติมเกี่ยวกับลำดับขั้วสามารถพบได้ที่http://vt100.netและhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html
มีคอนโซลอีมูเลเตอร์สำหรับ Windows ที่ตีความ ANSI ระบายสีหรือไม่
Windows ก่อน 10 - ไม่รองรับสีมาตรฐาน ANSI บนคอนโซล
สำหรับเวอร์ชั่น Windows ต่ำกว่า 10 คอนโซลคำสั่ง Windows ไม่รองรับการระบายสีตามค่าเริ่มต้น คุณสามารถติดตั้งCmder , ConEmu , ANSICONหรือMintty (ใช้เป็นค่าเริ่มต้นใน GitBash และ Cygwin) เพื่อเพิ่มการรองรับการระบายสีให้กับคอนโซลคำสั่ง Windows ของคุณ
Windows 10 - สีของบรรทัดคำสั่ง
เริ่มต้นจาก Windows 10 คอนโซล Windows รองรับ ANSI Escape Sequences และบางสีตามค่าเริ่มต้น
การสาธิต
ชุดคำสั่ง
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