Cara membuat konsol win32 mengenali ANSI/VT100 escape sequences?

I'm bangunan versi ringan dari ncurses perpustakaan. Sejauh ini, ia bekerja cukup baik dengan VT100-terminal yang kompatibel, tapi konsol win32 gagal untuk mengenali \033 kode sebagai awal dari urutan escape:

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

Apa yang perlu dilakukan pada kode C tingkat, agar ANSI.SYS sopir dimuat dan ANSI/VT100 escape sequences diakui?

Mengomentari pertanyaan (4)
Larutan

[UPDATE] Untuk terbaru Windows 10 silahkan baca kontribusi yang bermanfaat oleh @brainslugs83, hanya di bawah ini di komentar untuk jawaban ini.

Sementara untuk versi sebelum Windows 10 Ulang tahun Update:

ANSI.SYS memiliki pembatasan yang dapat dijalankan hanya dalam konteks MS-DOS sub-sistem di dalam Windows 95-Vista.

Microsoft KB101875 menjelaskan cara mengaktifkan ANSI.SYS di jendela perintah, tapi itu tidak berlaku untuk Windows NT. Menurut artikel di bawah ini: kita semua cinta warna, versi modern dari Windows tidak memiliki ini bagus ANSI dukungan.

Sebagai gantinya, Microsoft menciptakan banyak fungsi, tapi ini jauh dari kebutuhan anda untuk mengoperasikan ANSI/VT100 escape sequence.

Untuk penjelasan lebih rinci, lihat Wikipedia:

ANSI.SYS juga bekerja di PB yang berasal dari sistem 16-bit warisan program mengeksekusi bawah NTVDM.

Win32 console tidak native mendukung ANSI escape sequences sama sekali. Software seperti Ansicon namun dapat bertindak sebagai pembungkus seluruh standar Win32 console dan menambahkan dukungan untuk ANSI escape sequences.

Jadi saya pikir ANSICON oleh Jason Hood adalah solusi anda. Hal ini ditulis dalam C, mendukung 32-bit dan 64-bit versi Windows, dan sumber.

Saya juga menemukan beberapa pertanyaan serupa atau posting yang akhirnya telah dijawab dengan menggunakan ANSICON:

Komentar (6)

Mulai dari Windows 10 TH2 (v1511), conhost.exe dan cmd.exe dukungan ANSI dan VT100 Escape Sequences keluar dari kotak (meskipun [mereka harus diaktifkan][1]).

Lihat jawaban saya di atas superuser untuk informasi lebih lanjut.

[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs. 85).aspx

Komentar (2)

Mulai dari Windows 10, anda dapat menggunakan ENABLE_VIRTUAL_TERMINAL_PROCESSING untuk mengaktifkan ANSI escape sequences:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs. 85).aspx

Komentar (0)

Untuk Python 2.7 berikut script ini bekerja untuk saya baik-baik saja dengan Windows 10 (v1607)

import os

print '\033[35m'+'color-test'+'\033[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '\033[35m'+'color-test'+'\033[39m'+" test end"

Hasilnya harus:

[35mcolor-test[39m test end

color-test test end
Komentar (5)

Jika ANSICON tidak dapat diterima karena tidak mengharuskan anda untuk menginstal sesuatu di sistem, yang lebih ringan solusi yang mem-parsing dan menerjemahkan kode ANSI menjadi relevan [Win32 API konsol fungsi][1] seperti SetConsoleTextAttribute.

https://github.com/mattn/ansicolor-w32.c

[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs. 85).aspx

Komentar (0)

Untuk mewarnai cmd anda perlu Windows.h dan menggunakan SetConsoleTextAttribute() rincian lebih lanjut dapat ditemukan di http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

Komentar (1)

Dasar pada @BrainSlugs83 anda dapat mengaktifkan pada saat ini Windows 10 versi via daftarkan, dengan baris perintah ini:

REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
Komentar (0)

Saya pribadi suka penjara. Tidak hanya proses ANSI kode, ia juga menambahkan banyak fitur-fitur lainnya sehingga Jendela Konsol berperilaku seperti bash (sejarah, membalikkan sejarah pencarian, cara pintas keyboard, dll.):

  • baris Yang sama editing seperti Bash (GNU's Readline perpustakaan).
  • Sejarah kegigihan antara sesi.
  • Sensitif konteks penyelesaian;
  • Executable (dan setiap alias-aliasnya).
  • Direktori perintah.
  • Variabel lingkungan
  • Thirdparty alat; Git, Mercurial, SVN, Pergi, dan P4.
  • New shortcut keyboard;
  • Paste dari clipboard (Ctrl-V).
  • Incremental sejarah pencarian (Ctrl-R/Ctrl-S).
  • Kuat penyelesaian (TAB).
  • Undo (Ctrl-Z).
  • Otomatis "cd .." (Ctrl-PgUp).
  • Variabel lingkungan ekspansi (Ctrl-Alt-E).
  • (tekan Alt-H untuk lebih banyak...)
  • Scriptable penyelesaian dengan Lua.
  • Berwarna dan scriptable prompt.
  • Auto-menjawab "Terminate pekerjaan batch?" prompt.
Komentar (0)

Ansi.sys (di system32) adalah sebuah "MSDOS driver" yang disediakan sebagai bagian dari Windows XP, 2000, dan versi sebelumnya dari NT. Pada tahun 2000 dan XP, hal ini terletak di system32 (I don't ingat struktur dari versi sebelumnya NT). Program-program yang berjalan di DOS subsystem dan menggunakan standar output dapat menggunakan ANSI.SYS hanya karena mereka bisa menjalankan lebih dari MSDOS.

Untuk beban ansi.sys anda harus menggunakan perangkat= atau devicehigh= perintah di config, sama seperti anda akan di MSDOS. Pada Windows NT 5 (2K & XP), setiap salinan dari DOS subsistem dapat diberikan sebuah file konfigurasi terpisah di pif/shortcut (gunakan "maju" tombol), dan ada file default yang disebut KONFIGURASI.NT (juga di system32), yang digunakan jika pif/shortcut tidak menentukan khusus config file.

Ketika ansi.sys dimuat dengan benar, mem /d laporan yang dimuat. Pada versi sebelumnya dari NT, anda dapat dan harus memuat tepat DOS lingkungan untuk beban ansi.sys, dan ansi seni akan bekerja pada prompt. Di Win 2K dan XP, loading ansi.sys tidak akan berpengaruh pada anda "CMD prompt" karena CMD bukan program DOS: ini adalah 32 bit Windows console program. Untuk beberapa alasan yang saya tidak mengerti, pada WinXP, bahkan jika anda memuat tetap salinan command.com menggunakan "command.com /p", command prompt tidak akan ansi diaktifkan: mungkin ketika anda melakukannya dengan cara itu hanya mengemulasi loading command.com?

Dalam kasus apapun, ketika anda menggunakan aplikasi yang sebenarnya DOS versi command.com, ansi adalah diaktifkan setelah dimuat: anda dapat menunjukkan itu's digunakan dengan sedikit ansi seni seperti ini:

command /c type ansiart.ans

(berikut adalah contoh: http://artscene.textfiles.com/ansi/artwork/beastie.ans)

CONFIG.NT (di system32) berisi contoh sintaks untuk memuat driver perangkat. Anda akan perlu untuk menjadi Administrator untuk mengedit file default, atau anda dapat membuat salinan itu.

Di Win 2K dan XP, default "shortcut" untuk MSDOS adalah .PIF file, bukan .LNK file. Jika anda membuat .lnk file dengan CMD, anda memenangkan't dapat diatur khusus config dan file autoexec, ia akan menggunakan KONFIGURASI default.NT. Jika anda ingin menggunakan file konfigurasi untuk aplikasi DOS, anda dapat membuat salinan dari "MSDOS shortcut", atau anda dapat membuat salinan dari "_default.pif", yang ditemukan dalam folder Windows anda.

Komentar (1)

Dalam amandemen win10, hal ini dapat dilakukan dengan SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING). Lihat https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example

Komentar (0)

Mungkin ANSICON dapat membantu u

Hanya men-download dan ekstrak file, tergantung pada os windows anda: 32bit atau 64bit

Menginstalnya dengan: ansicon -aku

Komentar (0)

Saya menemukan alat ini akan bekerja untuk akhir saya. Microsoft Warna Alat dari GitHub

Unzip file terkompresi kemudian buka CMD dengan Pemberian izin.

Pergi ke folder dimana anda meng-unzip file di CMD.

Kemudian jalankan perintah ini "colortool -b skema-nama"

Skema-nama perlu diganti dengan salah satu dari pilihan di bawah ini:

  • campbell.ini
  • campbell-legacy.ini
  • cmd-legacy.ini
  • deuternopia.itermcolors
  • OneHalfDark.itermcolors
  • OneHalfLight.itermcolors
  • solarized_dark.itermcolors
  • solarized_light.itermcolors

Dalam kasus saya, perintah akan seperti ini "colortool -b solarized_dark.itermcolors"

Klik kanan pada jendela konsol dan pilih Properties.

Anda don't perlu mengubah apapun nilai klik "OK" untuk menyimpan pengaturan. (Anda akan melihat bahwa font anda sudah mengandung warna).

Console Properti

Kemudian restart cmd atau powerShell.

ANSI warna harus diaktifkan dan bekerja dengan skema warna yang anda pilih sebelumnya.

Komentar (2)

Memiliki masalah yang sama. Saya telah menginstal ConEmu dan salah satu yang memecahkan masalah saya.

Komentar (0)