コマンドパレットを利用する(v1.3版 その2)

【連載】

1からマスター! Windows Terminal入門

【第37回】コマンドパレットを利用する(v1.3版 その2)

[2020/10/01 08:00]佐々木宣文 ブックマーク ブックマーク

今回は、前回に引き続き、Windows Terminal 1.3で拡張されたコマンドパレットの使い方を紹介する。前回の記事の執筆時点ではバージョン1.3はまだプレビュー版だったが、その後2020年9月22日に正式リリースされたため、拡張されたコマンドパレットも正式版として利用できるようになった。バージョン1.3のコマンドパレットは、複数のコマンドをグループ化して階層構造を作れるなど、いくつかの新機能が追加された。それに伴って「setting.json」および「default.json」におけるキーボードショートカット設定の記述方法も拡張されている。今回はその拡張された設定方法について取り上げる。

コマンドにアイコンを表示する

まず、バージョン1.3ではコマンドパレットの各コマンドに任意のアイコンを表示できるようになった。アイコンの表示は必須ではなく、デフォルトでは省略されている。アイコンを表示したい場合は、次のようにコマンドの設定に対してiconプロパティを追加すればよい。一番簡単なのは任意の文字をアイコンに使用することで、この例の場合は虫眼鏡の絵文字を使っている。

iconプロパティに虫眼鏡の絵文字をセット

この場合、次のようにコマンド名の左側に絵文字がアイコンとして表示される。

絵文字をアイコンとして追加

任意の画像をアイコンにすることもできる。その場合、次のように画像のパスをiconプロパティに設定すれば、指定された画像がアイコンとして表示される。

iconプロパティに画像ファイルのパスをセット

任意の画像をアイコンとして追加

アイコンを追加する3つ目の方法はSegoe MDL2アセットのアイコンフォントを使用することだ。Segoe MDL2アセットはWindows 10に標準で用意されているフォントファミリーで、よく使われそうなアイコンに相当するフォントをたくさん含んでいる。Segoe MDL2アセットについては、以下のガイドラインを参照していただきたい。


このガイドラインで解説されているように、Segoe MDL2アセットフォントに含まれるアイコンはUnicodeの私用領域(PUA) にマップされている。そのため、setting.jsonでは、使用したいアイコンをUnicodeのコードポイントとして指定することができる。例えば、検索によく使われる虫眼鏡アイコンのコードポイントは「E721」だ(ガイドラインのページの一覧表を参照されたい)。そこで、iconプロパティには次のように「\u」の後に「E721」を繋げて記述する。

iconプロパティにSegoe MDL2アセットのコードポイントをセット

これで、Segoe MDL2アセットの虫眼鏡マークが、コマンドパレットのアイコンに表示されるようになる。

Segoe MDL2アセットフォントの文字をアイコンとして追加

ネストされたコマンドの設定方法

複数のコマンドをグループ化してネスト表示する設定も、setting.jsonへのキーボードショートカットの設定部分で記述することができる。例えば次のように、タブの色設定を行うコマンドをグループ化したい場合を考えてみよう。

複数のコマンドを「タブの色を設定する」という項目にまとめる

「カラーパレットを開く」は文字通りカラーパレットを表示し、「タブの色を○にする」はタブの背景色をその色に変える。いずれも第34回で紹介した、バージョン1.2で追加された新しいコマンドである。

このようなネストされたコマンドを作りたい場合には、設定ファイルには次のように記述する。

{
    "name": "タブの色を設定する",
    "commands": [
        { 
            "name": "カラーパレットを開く", 
            "command": "openTabColorPicker", 
            "keys": "ctrl+alt+c" 
        },
        { 
            "name": "タブの色を赤にする", 
            "command": { "action": "setTabColor", "color": "#ff0000" }, 
            "keys": "ctrl+alt+r" 
        },
        { 
            "name": "タブの色を緑にする", 
            "command": { "action": "setTabColor", "color": "#00ff00" }, 
            "keys": "ctrl+alt+g" 
        },
        { 
            "name": "タブの色を青にする", 
            "command": { "action": "setTabColor", "color": "#0000ff" }, 
            "keys": "ctrl+alt+b" 
        }
    ]
}

まず最初のnameプロパティはトップに表示されるコマンド名(コマンドのグループ名)である。続いて、「commands」プロパティを使って、グループ化したいコマンドを配列として記述する(「[」と「]」の中にカンマ区切りで並べる)。commandsの中に入れるコマンドは、それぞれ単体のコマンドとして記述する場合と同様でよい。

一見複雑に見えるが、実際にはcommandsの「[」と「]」の間に各コマンドの記述を並べただけなので、自分なりのグループを定義するのもそれほど難しくはないだろう。

反復指定で複数のコマンドを作成する

続いて、次の「New Tab…」のコマンドがどのように定義されているのかを見てみよう。「New Tab…」はデフォルトで用意された項目で、選択するとどのプロファイルで新規タブを作成するのかというリストが表示される。

「New Tab…」の表示例

ネストされたコマンドと同様だが、注目すべきポイントは、2段目の選択肢には使用可能な全てのプロファイル分用意しなければならないことだ。筆者の環境では6種類のプロファイルがあるので、6個のコマンド定義が必要ということになる。

このようなケースでは、反復指定を利用することで設定ファイルの記述を大幅に省略することができる。反復指定とは、例えば「全てのプロファイルに対して1つずつコマンドを作成する」というような指定方法である。default.jsonの「New Tab…」の定義を見てみると次のようになっている。

{
    "name": { "key": "NewTabParentCommandName" },
        "commands": [
            {
                    "iterateOn": "profiles",
                    "icon": "${profile.icon}",
                    "name": "${profile.name}",
                    "command": { "action": "newTab", "profile": "${profile.name}" }
                }
        ]
}

最初のnameプロパティは少し特殊な指定になっているが、自分で定義する場合はここは通常通りコマンドパレットに表示したい任意の名前を記述すればよい。特徴的なのは2段目にある「iterateOn」というプロパティと、「${profile.icon}」と「${profile.name}」という値指定だ。

まずiterateOnプロパティだが、ここには反復したい対象の要素を指定する。「profile」と指定した場合は、全てのプロファイルについて反復的にコマンドを生成するという意味になる。そして「${profile.icon}」は対象プロファイルのiconプロパティの値に、「${profile.name}」はnameプロパティの値に置き換わる。

バージョン1.3の時点では、反復指定できる対象はプロファイルとスキーマの2つだけであり、その場合にiterateOnに指定する値と、使用可能なプロパティの組み合わせは次のようになっている。

iterateOnの指定 プロパティ プロパティの値の指定方法
profiles name “name”: “${profile.name}”
profiles icon “icon”: “${profile.icon}”
schemes name “name”: “${scheme.name}”

「New Tab…」と同様の反復指定を利用して作成されたコマンドに「Split Pane…」がある。これも「Split Pane…」をクリックした後にペインを開くプロファイルが選択できるが、タブの場合と違うのは、プロファイルを選んだ先でさらにどの方向にウィンドウを分割するのかを選択できることだ。

「Split Pane…」の表示例

日本語表記が少しおかしいが、上から「自動指定」「横に分割」「縦に分割」のコマンドになる。全てのプロファイルに対して、同じように3つの選択肢ができている。このようなネスト構造は、設定ファイルではどのように記述されているのだろうか。

default.jsonの「Split Pane…」の指定部分を見てみると次のような記述になっている。

{
    "name": { "key": "SplitPaneParentCommandName" },
        "commands": [
            {
                    "iterateOn": "profiles",
                    "icon": "${profile.icon}",
                    "name": "${profile.name}...",
                    "commands": [
                            {
                                "command": { "action": "splitPane", "profile": "${profile.name}", "split": "auto" }
                            },
                            {
                                    "command": { "action": "splitPane", "profile": "${profile.name}", "split": "vertical" }
                            },
                            {
                                    "command": { "action": "splitPane", "profile": "${profile.name}", "split": "horizontal" }
                            }
                        ]
                }
        ]
}

各プロファイルの設定部分で、さらにcommandsプロパティを使って複数のコマンドを並べている。反復指定とネストの合わせ技である。

このように、Windows Terminal 1.3のコマンドパレットは1.2のものに比べて設定の記述方法も大幅に拡張されており、柔軟な項目の作成が可能になっている。確実に使いやすくなっているため、新機能も大いに活用していきたい。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る