このページの本文へ

前へ 1 2 次へ

Windows Info 第229回

Windows Terminalのカスタマイズを研究【キーボード編】

2020年06月21日 10時00分更新

文● 塩田紳二 編集● ASCII

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

Windows Terminalと同時に開発されたカラーパレット表示ツールを使って、カラースキーマを変更したところ

 正式版のv1.0が登場したWindows Terminalだが、19日にはPreview版でv1.1.1671.0が公開されたようである。このバージョンでは、キーボード関連の修正もあったようで、シェルのキーボードショートカットに問題を感じているようなら、プレビュー版をgithubからダウンロードしてインストールしてみるのもいいかもしれない。

 さて、今回は前回(「正式版が登場したWindows Terminalをカスタマイズする」)の続きで、Windows Terminalのキー割り当て、カラースキーマについて解説する。

 なお、ここでは、一連のキー入力を「キーストローク」と呼ぶ。キーストロークは、これを処理するプログラムが解釈してはじめて意味を持ち、文字入力となったり、機能の実行(たとえば、Backspaceキーで1文字削除)となる。ここでは、キー入力を解釈したプログラムがなんらかの機能を実行するキーストロークを「キーボードショートカット」と呼び、通常の文字入力とは区別する。ただし、何をキーボードショートカットとして処理するのかはプログラム次第である。

Windows Terminalとキー入力

 Windows Terminalでは、新規タブやペイン分割などの機能にキーボードを割り当て、これにより機能を実行させている。Windows Terminalのほとんどの機能にキーが割り当てられている。

 基本的な割り当ては、Windows Terminalのデフォルト値で割り当てがなされており、これをsettings.jsonで上書きすることが可能だ。逆に言えば、デフォルトの割り当てのままでよければ、settings.jsonには何も記述する必要がない。また、キー割り当てを含むデフォルト値は、defaults.jsonに記述がある。

 Windows Terminalが動作しているときのキーストロークの処理を大まかに図示すると、以下の図のようになる(WindowsTerminalを含むアプリケーションは、Windowsのキー処理を制御するAPIを利用できるため、本当はもっと複雑)。

ユーザーが入力したキーストロークは、Windows、Windows Terminalでの処理を経て、シェルに送られる。実際には、Windowsはキー入力制御のAPIがあり、アプリ側からの制御が可能であり、Windows TerminalもVTエスケープシーケンスでキー入力の制御をシェル側からできるため、このように単純ではない

 ユーザーのキー入力は、Windowsが受け、まずは、Windowsのキーボードショートカット(たとえば「Win+S」など)が処理される。また、一部の常駐プログラム(たとえばPowerToys)などは、Windowsのファンクションを使い、ユーザーからのキー入力を横取りし、必要なものだけを処理する。

 あるいは、日本語入力などのIMEは起動しているときにキーストロークを受け取って処理をすることがある。こうして処理されたキーストロークは、その時点で消えてしまい、Windows Terminalには渡らない(ただし、処理したプログラムが代わりのキーストロークを送ることがある)。

 Windows Terminalは、受け取ったキーストロークから自身のキーボードショートカットを処理する。たとえば、「Ctrl+Shift+1」は、デフォルトプロファイルで新規タブを作成する。Windows Terminalが処理しなかったキーストロークだけがタブやペイン内で実行されている「シェル」(コンソールプログラム)に渡される。

 シェルには、自身で処理するキーストロークがある。たとえば、cmd.exeは、左右のカーソルキーで入力行でカーソルを動かし、上下のカーソルキーでヒストリー(入力履歴)を表示する。F7キーを押すとヒストリーをポップアップウィンドウに表示する。

 注意してほしいのは、コマンドプロンプトウィンドウ(cmd.exeがconhost.exeの中で動作しているとき)のクリップボード操作(Ctrl+C、Ctrl+V、Ctrl+X)、検索機能(Ctrl+F)は、conhost.exeが処理しており、cmd.exeは関わっていない点だ。つまり、これらの機能を持つキーは、cmd.exeが実現している機能ではないのだ。cmd.exeはCtrl+Cをプログラム中断という意味でしか処理しない。

 同様にPowerShellやWSLのbashには、readlineと呼ばれるモジュールがシェルとともに動作しており、これが入力時の編集機能のキー割り当てなどを制御している。また、どのシェルでも、スクリーンエディタが動作すると、キーストロークはスクリーンエディタがすべて処理するようになる。たとえば、emacsを起動すれば、emacsのキー割り当てでキーストロークが処理される。

 この構造の中では、Windows Terminalとシェルのキー割り当てをお互いに一致させないようにすることが重要だ。しかし、どちらもユーザーが自分で割り当て可能であり、一致しないようにするのはユーザーの責任においてなされることになる。ただし、Windows Terminalでは、Ctrlキーを単独で併用するキー割り当てはごく少ないため、シェル側でその大部分が利用できる。

 Windows Terminalのキー割り当ては、以下の表のようになっている。これと利用するシェルで割り当てたキーボードショートカットを一致させないようにする。となると問題は、各シェルでのキーボードショートカットがどうなっているかである。

 まず、cmd.exeの場合には、コマンドとして表示させる機能がない。筆者が調べた範囲では、以下の表のようなキーボードショートカットが使われているようだ。前述のようにこの表には、Ctrl+Fのようなconhost.exeが処理するキーストロークは含まれていない。

 次にWSLのbashだが、こちらは、ユーザーがキーボードショートカットを自由に定義できるようになっている。自由とは言っても、文字入力などもあるので「不便にならない」割り当てというものがある。この処理をするモジュールはreadlineと呼ばれ、bindコマンドでキー割り当てを表示させることが可能だ。単に割り当てを表示させるなら

bind -p

だけでいいが、見やすい形式に変換するなら、

bind -p | grep -v -P '(not bound)|(self-insert)|(do-lowercase-version)' | sed -e 's/¥¥C-/[Ctrl]-/g' | sed -e 's/¥¥e/[ESC]-/g' | sort -f

などとして、見やすい形式に変換するといいだろう。Ubuntu-18.04でのデフォルト割り当ては、Ctrl+文字であり、Windows Terminalとの基本的な衝突はなさそうである。

 PowerShell(Windows組み込み版とCoreのどちらも)にも、readlineが組み込まれており、Get-PSReadLineKeyHandlerでキー割り当てを表示させることが可能だ。こちらも単独のコマンドで

Get-PSReadLineKeyHandler

とすれば、割り当てを見ることができるが、割り当てのあるキーのみを表示したいなら

Get-PSReadLineKeyHandler -Bound | Sort-Object key | Format-Table key,function

とするのがいいだろう。PowerShell Ver.7.1.0-preview.3での割り当ては、Alt+文字、またはCtrl+文字/機能キー、Ctrl+Shift+機能キーなどだ。こちらも標準では、Windows Terminalとの衝突はなさそうだ。

 こうして、シェル側のキーボードショートカットを調べ、もし衝突していることが判明したら、Windows Terminalかシェル側のキーボードショートカットのどちらかの割り当てを変える。

 一般的には、シェル側のキーボードショートカットは、長い時間をかけて環境に適合してきたのものなので、システムに熟知してないと、簡単に変えにくい。なので、原則的には新参者となるWindows Terminalの設定を変更したほうがいいだろう。

 変更は、defaults.jsonから該当するキー割り当ての行をコピーしてきて、settings.jsonで再度定義する。キー割り当てを解除して、Windows Terminalで処理を行わない場合には、unbindコマンドを使い

{ "command": "unbind", "keys": キーコンビネーション },
※キーコンビネーションは、キー割り当てを示す。例:"ctrl+shift+0"など

とする。あるいは、キーコンビネーションを書き換えて別の割り当てをしてもいい。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
2
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥660
3
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
¥18,980
4
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
5
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
6
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
¥1,780
7
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
8
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥1,880
9
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
10
Kindle Paperwhite シグニチャーエディション (32GB) 7インチディスプレイ、明るさ自動調整、色調調節ライト、12週間持続バッテリー、広告なし、メタリックブラック
Kindle Paperwhite シグニチャーエディション (32GB) 7インチディスプレイ、明るさ自動調整、色調調節ライト、12週間持続バッテリー、広告なし、メタリックブラック
¥23,980

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

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