1. ホーム
  2. windows

Win32コンソールにANSI/VT100のエスケープシーケンスを認識させるには?

2023-09-13 05:53:24

質問

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 コードレベルで何をする必要がありますか。

どのように解決するのですか?

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

以前のバージョンでは Windows 10 Anniversary Update :

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

Microsoft KB101875 では、コマンド ウィンドウで ANSI.SYS を有効にする方法について説明しています。

しかし、それは Windows NT には適用されません。 . その記事によると 私たちは皆、色が好きです。 の記事によると、最近の Windows のバージョンでは、この素晴らしい ANSI サポートがないとのことです。

代わりに、Microsoft は多くの関数を作成しましたが、これは ANSI/VT100 エスケープ シーケンスを操作する必要性からはほど遠いものです。

より詳細な説明については ウィキペディアの記事 :

<ブロッククオート

ANSI.SYS は NT-derived システムにおいて、NTVDM の下で実行される 16-bit レガシープログラムのためにも機能します。

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

というわけで、私は アンシコン はJason Hoodによるもので、これがあなたの解決策です。これは C で書かれており、Windows の 32 ビット版と 64 ビット版をサポートしています。 ソースが利用可能です。 .

また、似たような質問・投稿で、最終的にANSICONを使用するように回答されているものもありました。