2013-05-26 46 views
44

我正在構建一個ncurses庫的輕量級版本。到目前爲止,它工作得很好,與VT100兼容的終端,但Win32控制檯無法識別\033代碼作爲轉義序列的開始:如何讓win32控制檯識別ANSI/VT100轉義序列?

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

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

Screenshot

什麼需要可以在C完成代碼級別,以便加載ANSI.SYS驅動程序並識別ANSI/VT100轉義序列?

+1

有'爲Python colorama'模塊:【「在Windows上,從COLORAMA條標準輸出這些ANSI字符,並將其轉換成相應的Win32調用的彩色文本在其他平臺上,COLORAMA什麼也不做」( https://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python#comment3901803_3332860) – jfs

回答

42

[更新]中找到的Windows 10週年更新之前:

ANSI.SYS有一個限制,即它只能在Windows 95-Vista下的MS-DOS子系統上下文中運行。

Microsoft KB101875解釋瞭如何在命令窗口中啓用ANSI.SYS,,但它不適用於Windows NT。根據文章:we all love colors,現代版本的Windows沒有這個很好的ANSI支持。相反,微軟創造了很多功能,但這遠不是您需要操作ANSI/VT100轉義序列的原因。

如需更詳細的說明,請參閱Wikipedia article

ANSI.SYS也能在NT衍生系統的NTVDM下執行16位的傳統程序。

Win32控制檯根本不支持ANSI轉義序列。軟件如Ansicon可以作爲標準Win32控制檯的包裝,並添加對ANSI轉義序列的支持。

所以我覺得ANSICON由Jason胡德是您的解決方案。它寫在C,支持Windows的32位和64位版本,以及the source is available

而且我發現,最終就有了答案使用ANSICON其他一些類似的問題,或交:

+1

我曾經做過黑客工作,希望在Windows XP中使用ANSI,無需任何第三方工具https://groups.google.com/forum。 /#!topic/alt.msdos.batch.nt/YZnoq80Mcds – est

+1

時間如何變化;)在Windows 10 Anniversary Update及更高版本中,Windows控制檯已更新,並且對ANSI/VT序列提供了非常堅實的支持,並且在創作者更新中更新爲支持24位RGB顏色:https://blogs.msdn.microsoft.com/commandline/2016/09/22/24-bit-color-in-the-windows-console –

+0

答覆根據Rich Turner貢獻 –

24

從Windows 10 TH2(v1511)開始,conhost.execmd.exe支持ANSI和VT100轉義序列開箱即用(雖然they have to be enabled)。

請參閱my answer over at superuser瞭解更多詳情。

+3

105xx版本是唯一默認啓用VT100序列的版本。在之前和之後的版本中,默認情況下它被禁用,因爲它被錯誤地啓用。請參閱此處的說明https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/15617610--re-enable-enable-virtual-terminal-處理逐 –

5

對於Python 2.7以下腳本罰款對我的作品與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" 

結果應該是:

[35mcolor-test[39m test end 

color-test test end 
1

也許ANSICON可以幫助ü

只需下載並解壓縮文件,這取決於你的Windows操作系統:ansicon -i

0

我個人很喜歡clink:32位或64位

與安裝它。它不僅可處理ANSI代碼,它也增加了許多其他功能,因此Windows控制檯的行爲就像慶典(歷史,反向搜索歷史,鍵盤快捷鍵等):

  • 同一行編輯爲巴什(來自GNU的Readline庫)。
  • 會話之間的歷史持久性。
  • 上下文敏感完成;
    • 可執行文件(和別名)。
    • 目錄命令。
    • 環境變量
    • 第三方工具; Git,Mercurial,SVN,Go和P4。
  • 新鍵盤快捷鍵;
    • 從剪貼板粘貼(Ctrl-V)。 (Ctrl-R/Ctrl-S)。
    • 強大的完成(TAB)。 (Ctrl-Z)。
    • 自動「cd ..」(Ctrl-PgUp)。
    • 環境變量擴展(Ctrl-Alt-E)。
    • (按Alt鍵-H有更多...)
  • 編寫腳本的完成和Lua。
  • 彩色和腳本提示。
  • 自動應答「終止批處理作業?」提示。
相關問題