かなり使いやすくなりそうな新コンソール「Windows Terminal」がv0.8に

文●塩田紳二 編集● ASCII

2020年01月19日 10時00分

 昨年末に予定されていたWindows Terminalのプレビュー版の新バージョンは登場しなかったが、先週になってv0.8が公開された。すでにMicrosoftストア経由インストールしている場合、もうアップデートされているはずである。このv0.8の新機能として、

・検索
・レトロターミナル・エフェクツ(Retoro Terminal Effects)
・タブ幅モード
・キー割り当て機能の強化
・プロファイル共通設定

がある。

Windows Terminal v0.8では、ペイン分割で、自動で縦横の長い方を分割する自動分割機能が追加された。タブ内で自動分割を繰り返していくと、このように段々と右下に向かって小さくなっていく

テキストの検索機能が追加された

 検索機能は、Windows Terminalのタブ内(バッファー内)のテキスト検索機能だ。conhost.exeのシステムメニュー(タイトルバー左端のアイコンのクリックで開く)にある「編集」→「検索」機能に相当するもの。デフォルト設定では、Windows Terminalで「Ctrl+Shift+F」で検索ダイアログボックスを右上に表示する。

検索機能は、タブ内のテキスト検索機能。目視では探しにくい文字列も検索機能があればすぐに見付けることができる

 検索機能としては単純なテキスト検索のみだが、大文字小文字の区別は指定できる。また、バッファー内で、前方検索、後方検索が指定できる。

 「Ctrl+Shift+F」で開くダイアログにテキストを入力し、右側の上矢印(前方に向かって検索)、下矢印(後方に向かって検索)をクリックすることで検索し、見付けたテキストを選択状態とする。

 上下矢印ボタンの右側にある「Aa」はクリックで、「大文字小文字の区別」をオンオフするためのもの。Windows Terminalでは、選択時の背景色はselectionBackgroundプロパティで指定された色が使われる。このため、同プロパティを設定しておくことで検索語の表示背景色(かつ選択時の背景色)を指定することもできる。

 単純な検索機能だが、大量のリストを表示させてしまった場合、この検索機能を使うことで目的の情報を検索できるようになる。従来のconhost.exeでPowerShellを起動すると、「Ctrl+F」で検索ダイアログを出すことはできず、マウスでシステムメニューを操作して起動するか、「Alt+Space、E、F」という複雑なキーボードショートカットを使わねばならない。これが「Ctrl+Shift+F」で起動できるだけも便利だ。

レトロターミナル・エフェクツ

 これは完全なお遊び機能だが、かつて、本物の端末装置を使っていた人を懐かしい気持ちにさせてくれる。

レトロターミナル・エフェクツは、昔のCRT端末装置の表示を模したもの

 これは、Profile設定で指定することができるもので、現時点では「実験的」な機能と位置付けられている。テキストが細い横線の集まりとして表示され、ブラウン管(CRT、Cathode Ray Tubeとも言う。ブラウン氏が発明したためこの名がある。筆者が子供の頃にはブラウン管と呼んでいたが、パソコンが普及したあたりからCRTと呼ばれるようになった)の走査線で表示しているような感じになる。

 最近では、ブラウン管のディスプレーを見たこともない人がいるだろうから簡単に解説しておくと、ブラウン管は「真空管」の1種で、電子ビームを水平、垂直の2つの偏向コイル(電磁石)を使って曲げ、表示ガラス面の裏側にある蛍光物質にぶつけて光らせる。

 1画面を表示するタイミングがあらかじめ決まっており、電子ビームは左から右、上から下に向かって動く。これをスキャンといい、そのタイミングに合わせて電子ビームをオンオフすることで画面上に点を表示させる。動作がアナログ的なものでありスキャンラインの間には一定の休止期間(水平帰線期間)があるため、ブラウン管のサイズによってはスキャンラインの間が空いて見える。レトロターミナル・エフェクツはこのスキャンラインの空きを再現する文字レンダリングをするものだ。

 Schemaを定義するなどしてテキスト表示を緑やオレンジにして、文字を大きめにすると、より本物っぽくなる。

タブ幅モード

 タブ幅モード(tabWidthModeプロパティ)は、Windows Terminalのタブ幅をタイトルテキストに合わせて増減するかどうかを指定できる。v0.7までは、タブ幅はすべて同じ大きさで一定のサイズだったが、タブ幅モードを変更することで、タイトルテキストに合わせてタブ幅を自動調整できるようになった。

v07までは、タブの幅はタイトルテキストの長さに関わりなく一定サイズだったが、tabWidthModeを"tabWidthMode": "titleLength"と指定すると、タイトルの長さに応じてタブ幅が変わるようになる

 たとえば、bashでカレントディレクトリをウィンドウタイトルに表示するように設定されているLinuxディストリビューションを使うような場合、長いタイトルを省略せずに見ることができるようになる。逆に、短いタイトルをWindows TerminalのProfileで指定するなどした場合、同じウィンドウ幅により多くのタブを表示できるようになる。

 なお、タブのタイトルは、タブ内のペインの切り替えによっても変更されるため、異なるタイトルを表示するようなペインがある場合、タブ幅がペイン切り替えに応じて変化するため、タブバーがひょこひょこ動くことになる。頻繁にペインを切り替えていると、わりと気になることがある。ただしデフォルトは、従来通りタイトルによらず一定サイズになっている。

 tabWidthModeは、Profiles.jsonファイルのGlobals部分(冒頭の波括弧のすぐ後でProfilesキーワードの直前まで)で指定し、Profileごとの設定はできない。設定値には、"equal"(デフォルト値。従来と同じ一定幅のタブ)と、"titleLength"(タイトルテキストに合わせてタブ幅を増減)のどちらかを指定できる。

キーバインド記述の強化

 ペインは、v0.7で導入されたが、新たに作られたペインでは必ずデフォルトプロファイルのプログラムが起動していた。この部分は、キーバインドにプロファイルを記述できるようになり、一応実用的な機能になった。ただし、最終仕様に関しては、議論がgithubで続いており、親ペインと同じプロファイルを使う指定やプロファイルを選択するダイアログボックスを使う方法などが検討されている。ペインに関しては、開発途上ということで評価は避けたい。

 キーバインド記述の変更により、キーが実行する機能で、プロファイル指定、起動ディレクトリ、実行プログラム、タブタイトルなどが指定できるようになった。なお、プロファイル指定は必須ではないが、指定しないとタブを最初に起動した親ペインのプロファイル設定が引き継がれる。起動されるプログラムは、キーバインド内で指定できるため、プロファイルは、単なる色や挙動の指定に使うこともできる。また、v0.7までは、1つのキーボードショートカットに対して、ペインの縦分割、横分割のどちらかしか指定できなかったが、v0.7は、「自動分割」が指定でき、縦横のうち、長いほうを2つのペインに分割することができるようになった。

 これにより、新規タブ、ペインの縦横分割で何を起動するのかを指定することが可能になった。ただし、キー割り当てと起動されるプロファイル、プログラムの関係は常に一定であるため、指定できるのは、「新規ペインでCMD.EXEを実行するキー」であり、「新規ペインでUbuntu」を実行するキーは別に指定する必要がある。

 具体的にキー割り当てを行ってみたのが、以下のリストである。この例では、自動分割、縦分割、横分割で、CMD.EXEを起動するキー3つを定義した。それぞれ「Alt+Shift+H(水平分割)」、「Alt+Shift+V(垂直分割)」、「Alt+Shift+C(自動分割)」である。また、WSL2のUbuntuを指定するペインの自動分割としてAlt+Shift+Uを定義した。

"keybindings": [
  {"keys": [ "alt+shift+h" ],
    "command": { "action": "splitPane","split": "horizontal",
    "profile": "cmd",
    "startingDirectory": "c:\\temp",
    "commandline": "cmd.exe",
    "tabTitle": "CMD-H" }},
  {"keys": [ "alt+shift+v" ],
    "command": { "action": "splitPane", "split": "vertical",
    "index": 1,
    "startingDirectory": "c:\\temp",
    "commandline": "cmd.exe",
    "tabTitle": "CMD-V"}},
  {"keys": [ "alt+shift+c" ],
    "command": { "action": "splitPane","split": "auto",
    "profile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
    "startingDirectory": "c:\\temp",
    "commandline": "cmd.exe",
    "tabTitle": "CMD-auto" }},
  {"keys": [ "alt+shift+u" ],
    "command": { "action": "splitPane","split": "auto",
     "profile": "Ubuntu-18.04",
     "tabTitle": "Ubuntu18.04-Auto" }}
]

 このリストのように、プロファイルは、名前、インデックス番号、GUIDのどれでも指定ができる。注意するのは、インデックス番号はゼロから始まるため、最初のエントリーがゼロとなり、プロファイルを変更すると、インデックス番号が変わる可能性がある点だ。簡易的には、プロファイルの名前(nameプロパティ)を使うのがいいだろう。

 分割方法に「auto」を使うと1つのキーでペインの分割ができるので便利だ。Windows Terminalの初期ウィンドウサイズ(initalCols、InitialRows)にも依存するが、最初に横長でウィンドウを開くと、autoによるペイン分割は縦分割になる。2回目のペイン分割は、上下になる。3回目以降は、アクティブペインの状態で縦横分割が変わる。自由に縦横分割するのも悪くはないのだが、それぞれキーを覚えるのはちょっと億劫だ。自動分割を使えば、プロファイルごとに1つのキーを覚えれば済み、割り当てにシェル環境を表す文字、たとえば、CMD.EXEなら“C”とか、Ubuntuなら“U”を割り当てれば、比較的簡単に覚えることができる。

 こういう話を聞くと、キー割り当てをカスタマイズしたくなるだろうということで、以下の表にキー割り当てを示した。割り当てを重複させないようにキー順でソートしてある。ペイン関連は、デフォルトではAlt+Shiftを使っているので、同じキーの組み合わせとアルファベットを使えば覚えやすい。

プロファイルで共通設定が可能に

 v0.7までのプロファイル記述方法では、プロファイルの設定値は、defaults.jsonの"profile":指定とprofiles.jsonの"profile":指定で決まっていた。しかし、v0.8からは、

defaults.jsonの"profile":指定
profiles.jsonの"profile":共通設定
profiles.jsonの"profile":個別設定

と3段階の設定が可能になった。

 たとえば、どのプロファイルでも同じフォントを使いたいという場合、v0.7では個々のプロファイルで指定する必要があった。というのは、default.jsonはWindows Terminal内で固定しており、書き換えることができなかったからだ。

 しかし、v0.8からは、"profiles"プロパティを以下のリストのように記述でき、各プロファイルに共通の設定をdefaultsプロパティでできる。

"profiles": {
 "defaults": {
  "selectionBackground": "#FF7f7f",
  "experimental.retroTerminalEffect": false,
  "startingDirectory": "c:\\",
  "fontFace": "Cascadia Code"
  },
 "list": [
  {
   // Make changes here to the powershell.exe profile
   "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
   "name": "Windows PowerShell",
   "commandline": "powershell.exe",
   "hidden": false
   },
  {
   // Make changes here to the cmd.exe profile
   "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
   "name": "cmd",
   "commandline": "cmd.exe",
   "colorScheme": "Green",
   "selectionBackground": "#004f00",
   "experimental.retroTerminalEffect": false,
   "hidden": false
   },
  {
   "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
   "hidden": false,
   "name": "Ubuntu-18.04",
   "startingDirectory": "~",
   "source": "Windows.Terminal.Wsl"
  }
 ]
},

 たとえば、フォントやサイズをデフォルト値と異なる同一の設定にしておいて、色やカラースキーマ、背景などは個別に設定するようにできる。また、共通設定で設定した項目でも、個別設定で上書きできるため、特定のプロファイルだけは違う設定とすることも可能だ。

 少なくとも、プロファイルすべてで、全部指定するよりは記述量が少なくてすむ。前述のレトロターミナル・エフェクツ(experimental.retroTerminalEffect)も共通設定に入れて置いて、全てのプロファイルに対して有効にして、特定のプロファイルでのみオフにするといった設定が可能だ。

 Windows Terminalは、2019年内に春に登場する最終版の仕様を確定させる予定だったが、2019年12月版の機能として予定されていた機能のいくつかはv0.8でも未搭載のままだ。大まかな仕様は固まっているが、最終仕様が決定するのは次のバージョンになりそうな感じだ。プレビューをずっと見てきた感じ、従来の標準コンソールであるconhost.exeと比べてかなり使いやすくなりそうだ。

 しかし、従来のconhost.exeには、Windows NTの頃からの長い歴史があり細かい部分まで修正が行き届いている、俗に言う「枯れた」プログラムである。Windows Terminalは、まだ、そこまでいっておらず、たとえば、タブ区切りの長い文字列を表示させたときに折り返し位置などで区切り位置がかなり手前でされてしまうことがあるなど、conhost.exeとの違いが出ることがあり、「枯れる」までにはまだ時間はかかりそうだ。

■関連記事