Konsol Windows dengan penanganan warna ANSI

34

Apakah ada emulator konsol untuk Windows yang menginterpretasikan pewarnaan ANSI?

Kami menggunakan rspec dan bagian dari tim kami menggunakan Windows dan string khusus untuk pewarnaan tidak terlalu berguna bagi mereka;).

mrzasa
sumber

Jawaban:

40

ConEmu mendukung ANSI X3.64 dengan ekstensi warna Xterm 256. Saya penulis emulator konsol ini.

Urutan Ansi ditangani untuk semua proses, berjalan di tab ConEmu.

AFAIK, ConEmu mendukung lebih banyak kode, daripada Ansicon.

ConEmu dan ANSI X3.64 / Xterm 256 warna

Maximus
sumber
1
Batu ini! Sebagai seorang gamer saya suka fitur gempa. Konsol tampaknya dikunci di atas layar (meskipun opsi terkunci di atas dinonaktifkan). Terima kasih
Ced
bagaimana Anda menjalankan cmd dengan tab?
Mikey
@ Mikey Apa? Baca jawabannya dulu.
Maximus
35

Tidak ada jawaban di halaman ini yang menyebutkan aspek penting dari dukungan baru untuk Kontrol Terminal ANSI yang ditambahkan ke host konsol Windows 10 di build 16257 (dan lebih baru). Yaitu, itu tidak diaktifkan secara default. Kecuali jika perangkat lunak khusus yang Anda gunakan memungkinkan pemrosesan ANSI dengan memanggil SetConsoleMode API dengan ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)bendera, Anda tidak akan melihat warna atau mendapatkan pemrosesan ANSI untuk aplikasi itu.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

Saat menulis dengan WriteFile atau WriteConsole , karakter diurai untuk VT100 dan urutan karakter kontrol serupa yang mengontrol pergerakan kursor, mode warna / font, dan operasi lain yang juga dapat dilakukan melalui API Konsol yang ada. Untuk informasi lebih lanjut, lihat Urutan Terminal Virtual Konsol.

Saya menduga alasan contoh yang ditunjukkan pada halaman ini berfungsi adalah, ternyata echoperintah (atau mungkin bagian pemrosesan batch dari CMD.EXEatau conhost) memungkinkan pemrosesan ANSI dengan memanggil API yang baru saja disebutkan. Tetapi banyak alat atau executable lain yang menulis stdinatau stdoutmungkin tidak melakukan ini, dalam hal ini Anda tidak akan melihat warna untuk proses tersebut.

Untungnya, default global dapat diubah dari opt-in ke opt-out . Kunci registri at at HKEY_CURRENT_USER\Console\VirtualTerminalLevelmenetapkan perilaku default global untuk memproses urutan pelarian ANSI. Buat DWORDkunci (jika perlu) dan tetapkan nilainya untuk 1mengaktifkan (atau 0untuk menonaktifkan`) pemrosesan ANSI secara global .

[HKEY_CURRENT_USER \ Console]
"VirtualTerminalLevel" = dword: 00000001

Perhatikan bahwa pengaturan registri ini mengontrol default , artinya hanya memengaruhi aplikasi konsol yang tidak secara eksplisit memanipulasi mode konsol dengan menelepon SetConsoleMode(...). Oleh karena itu, meskipun nilai registri dapat membantu mengaktifkan ANSI untuk aplikasi yang tidak memperhatikan mode konsol , itu tidak akan berpengaruh pada aplikasi apa pun yang memahami mode konsol yang (karena alasan tertentu) dapat secara eksplisit menonaktifkan ANSI.

masukkan deskripsi gambar di sini

Glenn Slayden
sumber
21

Mulai dari Windows 10 TH2 (v1511), conhost.exe(dan, dengan ekstensi, cmd.exe) mendukung ANSI Escape Sequences, dalam warna tertentu:

gambar dari halaman MSDN yang disebutkan di bawah ini

The MSDN Halaman tentang Console Virtual Terminal Urutan menjelaskan apa urutan yang didukung dan cara mengaktifkan mereka:

Anda dapat menggunakan flag GetConsoleMode dan SetConsoleMode untuk mengonfigurasi perilaku ini. [...]

Perilaku dari urutan berikut didasarkan pada VT100 dan teknologi emulator terminal turunan, terutama emulator terminal xterm. Informasi lebih lanjut tentang urutan terminal dapat ditemukan di http://vt100.net dan di http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .

berguling
sumber
2
Urutan yang didukung dijelaskan di msdn.microsoft.com/en-us/library/windows/desktop/…
dbenham
Anda juga dapat mengubah warna default menggunakan Colortool . Instalasi Windows 10 baru akan mendapatkan warna yang sedikit dimodifikasi yang lebih mudah dibaca (terutama biru hitam), tetapi pembaruan akan mempertahankan warna lama yang sulit dibaca.
10

Apakah ada emulator konsol untuk Windows yang menginterpretasikan pewarnaan ANSI?

Windows sebelum 10 - tidak ada dukungan asli untuk warna ANSI di konsol

Untuk versi Windows di bawah 10, konsol perintah Windows tidak mendukung pewarnaan keluaran secara default. Anda dapat menginstal Cmder , ConEmu , ANSICON atau Mintty (digunakan secara default di GitBash dan Cygwin) untuk menambahkan dukungan pewarnaan ke konsol perintah Windows Anda.

Windows 10 - Warna Baris Perintah

Mulai dari Windows 10, konsol Windows mendukung ANSI Escape Sequences dan beberapa warna secara default.

Dokumentasi MSDN

Demo

masukkan deskripsi gambar di sini

Perintah Batch

Itu win10colors.cmdditulis oleh 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
Jens A. Koch
sumber
Pada Versi 1607 (OS Build 14393.693), warna pada Windows 10 telah dinonaktifkan.
geff_chang
2
Kenapa aku harus percaya itu? Tolong fakta. a) Tidak ada apa pun di changelog: support.microsoft.com/en-us/help/4009938 b) Berfungsi untuk saya: imgur.com/a/MNPNm
Jens A. Koch
1
Saya tidak yakin apa tepatnya versi Win10, tetapi disebutkan di sini: github.com/symfony/symfony/issues/19520 Pada laptop perusahaan saya - Ver 1511 (OS Build 10586.753) - Saya tidak membutuhkannya. Di PC rumah saya, saya harus menggunakan ansicon, karena warna tidak menyala secara default.
geff_chang
4
Mereka hanya memperkenalkan flag, yang mengontrol output berwarna dan salah secara default. Lihat wpdev.uservoice.com/forums/… ) --- Symfony menggunakan PHP.exe di Windows, di mana bendera dimatikan, jadi mereka harus menunggu patch, yang mendarat di sini: github.com/php/php- src / pull / 2103 . Situasi teratasi. --- Untuk cmd.exe bendera selalu benar. Itu sebabnya Anda memiliki dukungan warna pada konsol.
Jens A. Koch
1
Apakah kode-kode ini berfungsi dalam skrip shell di linux juga? atau apakah itu dilakukan dengan cara yang berbeda?
Mikey