• Windows Terminal ベスト設定 第13回「Windows Terminal V1.19安定版 V1.20 Preview」その1

今回は、Windows Terminalのv1.19安定版、およびv1.20プレビュー版の新機能について解説を行う。v1.19は、昨年の9月にプレビューが開始され、今年1月に安定版となった。同時にプレビュー版のv1.20が公開されている。

v1.20の新機能

(表01)は、v1.20の新機能の概要を示すものだ。v1.19は比較的新機能が多かったが、プレビュー版v1.20は、多くの修正を安定版v1.19と共有したため、新機能の追加はあまり多くない。なお、ここではVTエスケープシーケンス関係の新機能は含めていない。

  • ■表01

v1.20の新機能のうち、大きな改良点としては「検索結果のハイライト表示」がある(写真01)。これは、Windows Terminalの検索機能を使ったとき、ターミナル内の検索語がハイライト表示されるほか、スクロールバー右側に検索語位置のマーカーが表示される。検索語が見つけやすくなるのは、もちろんだが、スクロールバーに表示されるマーカーを見ることで、おおよその位置をつかむこともできる。なお、v1.19には、この機能はないが、検索ボックスに検索結果数と現在の位置を表示できる。

  • 写真01: 検索結果のハイライト表示では、検索条件にヒットした箇所が反転表示される。また、ウィンドウ右側のスクロールバーの右側に検索語の位置を示すマーカーが表示される

また、タブ、ペインの背景の「不透明度(opacity)」の指定が、非選択状態の場合も別に指定できるようになった。これを使うと、非選択状態のときだけ背景を透明にするといった設定が可能になる。従来は、選択、非選択状態の「不透明度」設定は同じものが使われていた。ただし、設定は、設定ページではなく、settings.jsonの設定により行う必要がある。具体的には、プロファイル設定に「フォーカスされていない外観」プロパティを追加し、その波括弧の中に不透明度を記述する。たとえば、


"unfocusedAppearance": {
    "opacity": 50
}

などとする(JSON中の記述である点に注意)。なお、v1.19では、同じく「フォーカスされていない外観」で「アクリル素材」の指定が可能になっている。「アクリル素材」は、背景がぼんやりと透けて見える表示方法で、Windows Terminalでは、タブバーなどに適用できる。v1.19では、フォーカスされている状態とフォーカスされていない状態で個別の指定が行える。

アプリケーションがAlternate Bufferを使っている場合、マウスホィールでアプリケーション画面のスクロールが可能になった。これをAlternate Scroll Modeという。このとき、ホィール操作は、カーソルキーの上下キーとしてアプリケーション側に送信される。

Alternate Bufferは、VTエスケープシーケンスの動作モードの1つで、通常の表示状態を保存し、別のメモリ領域(バッファ)を使った表示を行う。これにより、Alternate Bufferの終了時に、実行前の状態に戻すことができる。

WSLでmanコマンドを使ったときにAlternate Bufferが利用されている。v1.20では、man表示中にマウスホィールで上下スクロールが行える。ただし、ホィールの1クリック分で上下カーソルキーコードが1つ送信されるため、Windowsのホィール動作とは若干の違いがある。

Windows Terminalには、エクスプローラーなどからファイルやフォルダをドラッグ&ドロップしたときにそのフルパスをコマンドラインに入力する機能がある。パスにスペースなどが含まれる場合、ダブルクオートでくくって入力するが、WSL系プロファイルの場合に限り、シングルクオートを使うようになった。

ただし、この機能は完全ではなく、WSLかどうかの判定は、プロファイルに「"source": "Windows.Terminal.Wsl"」が存在するかどうかで行っている。このため、実際には、WSLが起動していてもsourceプロファイルが正しく設定されていないと、シングルクオートに切り替わらない。

またWSLでは、Win32相互運用機能により、任意のWindows実行ファイルを起動でき、その中には、cmd.exeやPowerShell.exeなども含まれる。しかし、この場合でもシングルクオート、ダブルクオートの切り替えは行われず、プロファイルに従ってシングルクオート、ダブルクオートが選択される。

原稿執筆時点ではプレビュー版v1.20は、不具合が目立つ。たとえば、settings.jsonにエラーがあったときのダイアログが表示されないことがある。今回の改良で、jsonファイルのエラーを修正して書き込むと、ダイアログを自動で閉じるという機能が搭載されたが、それを確認することができなかった。公開してすぐアップデートが出ており、今後修正されると思われる。

安定版v1.19の新機能

v1.19は、比較的改良点が多い(表02)。ただし、いくつかの機能は、いくつかは、「実験的」とされており、プレビュー版には含まれていたものの、安定版には含まれない。こうした機能には「スクロールバーマーク」、「シェル統合」、「入力のサジェスチョン」、「マウスによるカーソル位置指定」などがある。なお、「スクロールバーマーク」に関しては、「Windows Terminal ベスト設定 第5回」に、「シェル統合」に関しては、「Windows Terminal ベスト設定 第8回」に解説記事がある。

  • ■表02

「Webサーチ」機能は、選択した文字列をWeb検索する機能。機能の実行は、キー割り当てもしくは右クリックメニュー(写真02)で行う。

  • 写真02: テキストを選択状態にして、右クリックするとコンテキストメニューに「Web検索」が表示され、これで指定したURLを使っての検索が可能になる

キー割り当ては、settings.jsonを編集して行う。キー割り当て用のactionsプロパティ内で、以下のようにsearchWebアクションにキーを割り当てる。


{
  "command":{
    "action": "searchWeb",
    "wrapWithQuotes":false,
    "queryUrl":"https://www.bing.com/search?q=%s"
  },
  "keys": <キー定義>
},

queryUrlプロパティで指定するURL中の「%s」の部分に選択した文字列が入る。<キー定義>には、個々の環境で有効なキー割り当てを指定する。

キーが異なれば複数のsearchWebアクションをqueryUrlを変えて定義できる。これにより、キーワードによって検索サイトを切り替えて使うことができる。キー割り当てに関しては、過去記事「Windows Terminal ベスト設定 第1回「キーボードカスタマイズ 導入編」」を参考にされたい。

右クリックメニューを使う場合には、settings.jsonのグローバルセクション(トップレベル)に、searchWebDefaultQueryUrlプロパティを置き、検索用URLを設定する。


"searchWebDefaultQueryUrl":"https://www.google.com/search?q=%s"

上記の設定で「%s」の部分に選択した文字列が入る。

右クリックメニューを有効にするため、個々のプロファイル(Profiles.list.~)または、デフォルトプロファイル(Profiles.defaults)内に


"experimental.rightClickContextMenu": true

を定義する。

マウスやマークモード(ctrl+shift+m)を使い、文字列を選択したら、右クリックメニューの「Web検索」また、割り当てたキーを使ってWeb検索を起動する。

ブロードキャストモードは、タブ内のすべてのペインに同じキーストロークを送信するモード。ペインごとに異なるサーバーにリモートシェルで接続しているときに、すべてに同じコマンドを送ることができる(写真03)。モードが有効になると、タブのアイコンの右側に電波塔のようなアイコンが表示される。

  • 写真03: ブロードキャストモードは、タブ内のすべてのペインに対して同一のキーストロークを送信でき、これにより同一のコマンドを同時実行させることができる。タブには、電波塔のようなアイコンが表示される

デフォルトではキー割り当てはないが、コマンドパレットから「toggleBroadcastInput」(英語)、「ブロードキャスト入力をすべてのウィンドウに切り替える」(日本語)を選択することで、ブロードキャストモードのオンオフを切り替えることができる。なお、日本語の翻訳が少しおかしいが、ブロードキャストモードはタブごとのモードになっている。

タブ上の右クリックメニューも拡張された。新規項目としては「タブを新しいウィンドウに移動」がある(写真04)。これを使うとタブを新規ウィンドウとして分離できる。なお、タブをドラッグ&ドロップして、他のウィンドウのタブバーに持っていくことで、タブを他のウィンドウに移動させることも可能。

  • 写真04: クラッシュなどでシェルが停止している場合、タブの右クリックメニューに「接続の再起動」が表示され、これによりシェルを再起動させることができる

また、実行中のシェルがクラッシュ、停止している場合、タブの右クリックメニューには「接続の再起動」が表示され、これでセッションを新規に開始できる。

Windows Terminalのメインメニューでは、プロファイルが表示されるが、ここでプロファイル項目を右クリックすると「管理者で実行」メニュー項目が表示される(写真05)。これを使うことで修飾キーを使わずにプロファイルを管理者権限で起動できる。

  • 写真05: メインメニューのプロファイル項目で右クリックすると「管理者として実行する」項目が表示される。従来コントロールキーを併用してクリックすると管理者として実行が行えたが、修飾キーを使わずに実行できるようになった

v1.19では、コマンドラインオプションにも変更がある。1つは、起動するプロファイルに対して、オプションを追加するための「--appendCommandLine」オプションだ。これを使うことで、プロファイル側で定義されている起動コマンドを実行し、そのときに追加するオプションをコマンドラインで指定できる。たとえばPowerShell(Windows PowerShellでも可)から


wt.exe -p PowerShell --appendCommandLine -- -noprofile -noexit -command echo hello

とすることで、Windows Terminalのウィンドウを開き、PowerShellプロファイルを起動する。このとき後半にある「 -noprofile -noexit -command echo hello」が、プロファイルの起動コマンドにオプションとして追加される。なお、途中の「--」は、以後のハイフンで始まるオプションをPowerShellが解釈しないようにする「パラメーター終了トークン」である。

もう1つのコマンドライン変更点は、環境変数を親から引き継ぐ(--inheritEnvironmentオプション)か、起動時に最新状態を取り込むか(--reloadEnvironmentオプション)を指定するオプションである。Windows Terminalは、v1.18で、環境変数の更新に対応した。このため、アプリケーションのインストールなどで、環境変数が更新されたとき、自動的にこれに対応していた。しかし、スクリプト実行などでは、親プロセスが設定した環境変数を利用することがある。このため、オプションでこれをどうするのかを指定できる。このオプションを指定しない場合には、親プロセスの環境変数を引き継ぐ。環境変数(Shioda)を定義したあと、それぞれのオプションを付けてWindows Terminalを起動したのが写真06である。--reloadEnvironmentの場合、起動したcmd.exeには環境変数shiodaが定義されていないが、--inheritEnvironmentの場合には、定義が残っている。

  • 写真06: コマンドラインオプションで、環境変数の引き継ぎ方法を指定できる。親になるWindows Terminal内で、--reloadEnvironmentオプションを指定すると、その時点の環境変数定義でウィンドウが開き、親環境で指定した環境変数(shioda)は見えなくなる(写真中央)。--inheritEnvironmentオプションを指定すると親の環境を受け継ぎ、親で指定した環境変数(shioda)が新規に開いたウィンドウでも見える(写真下)

V1.19、v1.20には、このほか、内部的な改良や、VTエスケープシーケンスなどの改良点もある。次回は、こうした「目に見えない」改良点などについて解説を行う。

>> Windows Terminal ベスト設定 連載バックナンバー
https://news.mynavi.jp/tag/winterminal/