78

ncurses ライブラリの軽量バージョンを構築しています。これまでのところ、VT100 互換の端末では問題なく動作しますが、win32 コンソールは\033コードをエスケープ シーケンスの開始として認識できません。

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

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

スクリーンショット

ANSI.SYS ドライバがロードされ、ANSI/VT100 エスケープ シーケンスが認識されるためには、C コード レベルで何を行う必要がありますか?

4

13 に答える 13

75

[更新] 最新の Windows 10 については、この回答へのコメントのすぐ下にある @brainslugs83 による有用な貢献をお読みください。

以前のバージョンの場合Windows 10 Anniversary Update:

ANSI.SYS には、Windows 95-Vista の MS-DOS サブシステムのコンテキストでのみ実行できるという制限があります。

Microsoft KB101875 には、コマンド ウィンドウで ANSI.SYS を有効にする方法が説明されていますが、Windows NT には適用されません。記事によると: we all love colors、最新バージョンの Windows には、この優れた ANSI サポートがありません。

代わりに、Microsoft は多くの関数を作成しましたが、ANSI/VT100 エスケープ シーケンスを操作する必要はありません。

より詳細な説明については、ウィキペディアの記事を参照してください。

ANSI.SYS は、NTVDM で実行される 16 ビット レガシ プログラム用の NT 派生システムでも機能します。

Win32 コンソールは、ネイティブでは ANSI エスケープ シーケンスをまったくサポートしていません。ただし、 Ansiconなどのソフトウェアは、標準の Win32 コンソールのラッパーとして機能し、ANSI エスケープ シーケンスのサポートを追加できます。

したがって、Jason Hood による ANSICONがあなたのソリューションだと思います。Cで書かれており、32 ビット版と 64 ビット版の Windows をサポートしており、ソースは.

また、ANSICONを使用するために最終的に回答された他の同様の質問または投稿を見つけました:

于 2013-05-28T18:43:07.947 に答える
42

Windows 10 TH2 (v1511) 以降では、 ANSI および VT100 エスケープ シーケンスをすぐconhost.exeにサポートします (ただし、有効にする必要があります)。cmd.exe

詳細については、スーパーユーザーで私の回答を参照してください。

于 2016-03-08T10:33:02.443 に答える
17

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
于 2016-09-24T09:59:47.330 に答える
17

Windows 10 以降では、ENABLE_VIRTUAL_TERMINAL_PROCESSINGANSI エスケープ シーケンスを有効にするために使用できます。

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

于 2016-06-13T07:04:45.160 に答える
2

個人的にはカチャカチャが好きです。ANSI コードを処理するだけでなく、他の多くの機能も追加するため、Windows コンソールはbashのように動作します(履歴、逆履歴検索、キーボード ショートカットなど)。

  • Bash と同じ行編集 (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 によるスクリプト可能な補完。
  • 色付きのスクリプト可能なプロンプト。
  • 「バッチ ジョブを終了しますか?」プロンプトの自動応答。
于 2018-02-20T13:31:36.640 に答える