プレビュー版はv1.7まで進んだWindows Terminal
Windows Terminalは、3月に入り、通常版のv1.6、プレビュー版ではv1.7の配付が始まった。v1.6のプレビュー版では、GUI設定ページが搭載されたが、まだプレビューのプレビューという感じで、キー割り当てなどをしないとGUI設定ページを出せなかった。
しかし、プレビュー版v1.7では、従来settings.jsonを開くキー割り当てである「Ctrl+,」でGUI設定ページが開くようになり、どうやら“プレビューのプレビュー”からただの“プレビュー”になったようである。これにともない、キー割り当てを表示するタブが追加された。ただし、キー割り当ては、まだsettings.jsonでする必要があるようだ。
しかし、v1.7には、それ以外にもいくつもの新機能が搭載された。ここでは、これらをまとめて解説する。なお、v1.6までの機能などについては、本連載の過去記事などをご覧いただきたい。
●正式版が登場したWindows Terminalをカスタマイズする
●Windows Terminalのカスタマイズを研究【キーボード編】
●プレビュー版で開発が進められているWindows Terminal
●Preview版でv1.5まで進化したWindows Terminalの新機能を確認
●v1.6まで進化し、GUIでの設定ページも用意されたWindows Terminal
さて、v1.7に搭載された新機能だが、主なものとしては、以下が挙げられる。
・Windows Terminalウィンドウの制御
・settings.jsonのJSONフラグメントのサポート
・キー割り当てが可能な新規Action
・そのほか
「Windows Terminalウィンドウの制御」とは、コマンドラインから1回表示させたWindows Terminalのウィンドウをコマンドラインオプションで指定する方法だ。v1.6までは、wt.exeで新規ウィンドウを開くことはできたし、そのときにコマンドラインオプションでタブを追加する、ペインを分割するといったことは可能だったが、ウィンドウが開いたあとは、そのウィンドウで操作しない限り、他のWindows Terminalウィンドウからは制御ができなかった。
新規Actionには、再検索機能や新規ウィンドウ、ペインの読みとり専用モード設定などがある。一部のActionには、標準でキーが割り当てられているが、そうでないものもあり、ユーザーがsettings.jsonファイルでキー割り当てをする必要がある。
コマンドラインからウィンドウの制御が可能に
プレビュー版v1.7最大の新機能は、コマンドラインからウィンドウを指定して制御できるようになったことだ。つまり、一度表示させたWindows Terminalのウィンドウに対して、ペインの分割や新規タブ追加など、コマンドラインから制御できる。これにより、たとえば、アプリケーションから別のターミナルウィンドウを表示させる、表示させたWindows Terminalのウィンドウをペインに分割する、別のタブを選択するといったことが可能になる。
この際に追加されたのが「--window」オプションだ。短縮形式で「-w」という指定も可能。このオプションに続けてウィンドウ番号を指定することで、既存のウィンドウが制御できるようになる。また、この拡張に対応して、別ウィンドウを開くためのActionやwt.exeのみでオプションを付けずに起動した場合の挙動の設定といった新機能も搭載された(後述)。
ウィンドウの制御は、「--window 整数」として整数でウィンドウ番号を指定する。ウィンドウ番号が初めて使われる場合には新規ウィンドウとなる。以後は、同じウィンドウ番号が指定されたwt.exeコマンドのオプション指定は、すべて同じウィンドウに対するものとなる。
なお、ウィンドウ番号は、コマンドを発行する側が「適当」なものを指定する必要がある。他のアプリケーションと衝突したくなければ、ユニークな整数値を生成すればいいだろうし、個人的に使うなら、自分で適当な番号「12345」などを使えばよい。ただし、ウィンドウ番号の0は自分自身を、-1は常に新規ウィンドウを意味する。
以下の表は、プレビュー版v1.7で利用可能な起動オプションの一覧である。--windowオプションとこれらのサブコマンドを組み合わせることで、既存のウィンドウを制御できる。大まかには、「新規タブ」「ペイン分割」「タブ選択」のどれかが可能だ。
ウィンドウ番号は、wt.exeを起動する側が管理する。PowerShellからだと、
wt.exe --window 1234 new-tab Powershell.exe -command { help get-member }
のようにする。ウィンドウ番号1234は、筆者が適当に決めた数字であり、数字自体には意味はない。これを1回実行すると、Windows Terminalのウィンドウが新規に開き、PowerShellで「help get-member」というヘルプコマンドが実行される。もう一度上記のコマンドを実行すると、同じウィンドウにタブが追加されて、同じようにヘルプコマンドが実行される。
2回目は、最後の部分を「{ help get-chileitem }」などと他のコマンドのヘルプにしてもよい。このように同一のウィンドウ番号を--windowオプションのパラメーターとして指定することで、同一のウィンドウに対して、起動オプションによる制御を行うことができる。たとえば、2回目に
wt.exe --window 1234 split-pane Powershell.exe -command { help get-childitem }
とすれば、最初のウィンドウのタブがペイン分割されて、もう一方では「help get-childitem」が実行される。Windows Terminalを制御したいプログラムでは、このように同一のウィンドウ番号を使って制御できる。
WSL内では、ちょっとした注意が必要だ。というのは、wt.exeは、UWPアプリケーション(Windows TerminalはUWPアプリケーションである)の「アプリ実行エイリアス」であるため、wt.exeという実行ファイルはどこにも存在しない。このため、Linux内からは、wt.exeをWin32相互運用性で起動することはできない。
ではどうすればいいのかというと、「cmd.exeをWSLのWin32相互運用性で起動し、/Cオプションを使って「start wt.exe」を実行させる。これにより、wt.exeはcmd.exeのコマンドとして起動される。具体的には、以下のようにだ。
cmd.exe /c "start wt.exe --window 12345 new-tab wsl.exe -- man bash"
これにより、別のWindows Terminalウィンドウが開き、その中でWSLが起動し「man bash」コマンドが実行される。もちろん、「man bash」の部分を書き換えることで別のコマンドや別のmanページを見ることもできる。単に別のWindows Terminalを起動してコマンドを打ったのと同じだが、上記のコマンドを含むスクリプトなどを作っておくと、キー操作だけで別ウィンドウにmanページを表示できるようになる。
これは、Windows Terminal固有の話のようだが、筆者は同じようなことをするスクリプトを1980年台の終わり頃にUNIXワークステーションで作ったことがある。UNIXワークステーションでは、GUIが利用できるようになり、xtermと呼ばれる端末ソフトを複数同時に表示できるようになったときの話だ。
複数のコンソールがタブで1つのウィンドウにまとまっているというのもメリットではあるが、別のウィンドウに表示されている情報を見ながら、コマンドを入力したいこともある。もちろんマルチウィンドウであれば、これは可能だが、マウスを使わずにキー操作だけでできるというのはメリットである。
UNIXでは、コマンドラインが基本だったので、xtermは多数の起動オプションを持ち、細かく制御が可能だった。しかし、Windowsは最初からGUIなので、実はコマンドラインに非力な部分がある。Windows Terminalは、この--windowオプションで、ようやく当時のGUI環境の中の端末環境に追いついたともいえる。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ