このページの本文へ

前へ 1 2 次へ

Windows Info 第153回

進化するWindows 10のターミナル、“色”で30年来の制限から脱却

2018年12月30日 15時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows Subsystem for Linuxの搭載で
必要になったコンソールの進化

 しかし時は流れて、マイクロソフトはWindows XPではMS-DOSを捨て、64bit版Windowsは16bitモードを捨てた。このため、もはやIBM PCのテキストディスプレイとはなんの関係もないはずにも関わらず、コンソールAPIの仕様はそのまま残っているのである。

 WSLが搭載されたことで、VT100互換のエスケープシーケンスを受け付けるようになった。そもそも、MS-DOS時代の「コンソール」は、VT互換のエスケープシーケンス(当時はANSIエスケープシーケンスと呼んだ)機能を持っていた。それが、NTカーネルと統合された段階で廃止となり、以来ずっと、コンソールAPIを使ってアプリケーションが開発されてきた。

 このVT互換の端末装置(ターミナル)にもカラー表示が可能なものがあり、やはり文字、背景それぞれに16色を指定することができる。ただし、VT互換のエスケープシーケンスは、デフォルトカラーという概念を持つ。これは、黒地に白文字などのデフォルトの文字色、背景色に色指定を戻すもので、文字色/背景色指定のエスケープシーケンスでデフォルトカラーに戻すことができるようになっている。

 これに対して、コンソールAPIでは、いつでも好きな色で文字と背景を表示できるため、デフォルトカラーという概念がなく、カラーパレットにより、16色のカラーコードにそれぞれ独立して24bitのRGBを設定できる。つまり、文字色も背景色も1677万7216色の任意の色に設定できる。

 Windowsでは、1つのコンソールでWin32アプリを起動し、そこからWSL側のコマンドを起動することもできる。このため、WSLのコマンドが動作しているとき、すでにWin32アプリにより文字色や背景色が設定されていたり、カラーパレットが変更されている可能性がある。WSL側が文字色や背景色を16個のカラーコードから指定しても、望み通りの色になることは保証できない。そればかりか、カラーパレットの状態によっては黒地に黒文字などユーザーには見えない表示になってしまう可能性さえある。

 このために作られたのが、19H1にある「前景分離」「背景分離」の機能だ。この設定をオンにすると、設定した色が文字と背景のデフォルトカラーになる。初期状態がこの色になるのと、エクスケープシーケンスでデフォルトカラーを選択したときにカラーパレットの状態にかかわらず、指定した色が使われる。

 色の問題は解決したが、Windowsコンソールが対応しなければならない問題はいくつもある。そのうちの1つが文字コードの問題だ。

 簡単に言えば、現時点では8bitまたは16bitにエンコードされた文字コードしか扱うことができない。たとえばUTF-8では1文字を表すのに1~4バイトが必要になる。さらに、絵文字などの表示では、指定されたフォントセットにない文字を他のフォントセットから切り替えて使う「Font-fallback」といった仕組みが必要になる。

 さらに細かく見ていくと、絵文字では、男女や肌の色などを切り替えるために文字の合成機能を使う。そこで複数の文字を組みあわせて1つの文字として表示する機能などが必要になる。コンソールは、このあたりが今のところまったく対応できていない。マイクロソフトのブログなどによれば、「October 2018 Update」(RS5、Windows 10 Ver.1809)には、UTF-8を扱うための基本的な仕組みは組み込まれたものの、完全なかたちでUTF-8をサポートするところまでは到達していないという。コンソール改良の道はまだ半ばというところか。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン