2019/05/14版_Windows Terminal をビルドしてみる(VS2019)・設定とキーバインド変更

はじめに

Windows Terminal はどんどん開発が進んでいます。
この記事は 2019/05/14 時点でのメモなので
数日後には使えなくなっている可能性があります。

準備

Visual Studio

現時点では Visual Studio 2017 でビルドするのが一番安定するみたいですが
手に入る Visual Studio 2019 の Community を使います。
これは通常どおりインストールするだけ。

WinRT C++ library

いろいろ試した結果 winrt/TerminalApp.h が無いぞとエラーになったので
はじめからインストールしておいた方が無難そう。
むしろこれが原因と思っている。

ここからダウンロードしてインストール。

Windows Terminal のソース

これはふつうに以下から git clone する。

nuget

インストールしていない人は nuget を使えるようにする。 通常どおりの手順でインストールするのが良いはずだが、 Windows Terminal のソース中 dep\nuget\nuget.exe にあるので
PATH のとおったところにコピーしても動作した。

ビルド

  1. cmd.exe で git clone した Windows Terminal のディレクトリへ移動する
  2. git submodule update --init --recursive
  3. nuget restore OpenConsole.sln
  4. Windows Terminal のソースにある OpenConsole.sln を開いて Visual Studio を起動する。
  5. 日本語 Windows だと文字コードの問題があるので以下のソースを UTF-8 BOM 付きで保存しなおす。 diff は下の方に。
    • src\tools\vtpipeterm\main.cpp
    • src\inc\test\CommonState.hpp
    • src\terminal\parser\ut_parser\InputEngineTest.cpp
  6. 同様に src\tools\vtpipeterm\main.cppUTF-8 な文字列に u8 を追加する。
  7. Visual Studio のメニューバー下で「Release」「x64」「CascadiaPackage」を選択
  8. Visual Studio のメニューから「ビルド」→「ソリューションのビルド」を選択してビルド開始
    • ここで winrt/TerminalApp.h が見つからないのエラーが出ていた → WinRT C++ library のインストール
    • ここで 文字コード 932 では表現できないというエラーが出ていた → BOM 付き UTF-8 で保存しなおし & u8 を付ける
  9. 無事ビルドが成功したら Visual Studio のメニューから「ビルド」→「ソリューションの配置」を選択して Windows に登録

9 まで完了すると Windows のスタートメニューに Windows Terminal (Dev Build) が追加されている。

なお、手順によってはプラットフォームツールセットを v142 にせよとも見たが
上記の手順では v141 のままで成功している。

src\tools\vtpipeterm\main.cpp の文字列に u8 を付ける diff は以下。

   switch(lang)
         {
             case TEST_LANG_CYRILLIC:
       -                str = "Лорем ипсум долор сит амет, пер цлита поссит ех, ат мунере фабулас петентиум сит.";
+                str = u8"Лорем ипсум долор сит амет, пер цлита поссит ех, ат мунере фабулас петентиум сит.";
                 break;
             case TEST_LANG_CHINESE:
-                str = "側経意責家方家閉討店暖育田庁載社転線宇。";
+                str = u8"側経意責家方家閉討店暖育田庁載社転線宇。";
                 break;
             case TEST_LANG_JAPANESE:
-                str = "旅ロ京青利セムレ弱改フヨス波府かばぼ意送でぼ調掲察たス日西重ケアナ住橋ユムミク順待ふかんぼ人奨貯鏡すびそ。";
+                str = u8"旅ロ京青利セムレ弱改フヨス波府かばぼ意送でぼ調掲察たス日西重ケアナ住橋ユムミク順待ふかんぼ人奨貯鏡すびそ。";
                 break;
             case TEST_LANG_KOREAN:
-                str = "국민경제의 발전을 위한 중요정책의 수립에 관하여 대통령의 자문에 응하기 위하여 국민경제자문회의를 둘 수 있다.";
+                str = u8"국민경제의 발전을 위한 중요정책의 수립에 관하여 대통령의 자문에 응하기 위하여 국민경제자문회의를 둘 수 있다.";
                 break;

設定変更

git リポジトリにも説明があるので変更したところだけ。

プロファイル

起動するターミナルやカラーテーマを指定するプロファイル。
WSL を使いたかったので profiles に以下を追加した。 guid は適当に指定したが正しいか調べられていない。 あとはフォントの種類やサイズ等を指定。

    {
      "guid": "{cmd のプロファイルをもとに適当に指定}",
      "name": "wsl",
      "colorscheme": "nord wave",
      "historySize": 9001,
      "snapOnInput": true,
      "cursorColor": "#FFFFFF",
      "cursorShape": "bar",
      "commandline": "wsl.exe",
      "fontFace": "Noto Sans Mono CJK JP",
      "fontSize": 11,
      "acrylicOpacity": 0.75,
      "useAcrylic": true,
      "closeOnExit": false,
      "padding": "10, 10, 10, 10"
    }

タブ関連

タイトルバーの中にタブを表示したかったので以下を追加。
追加位置は defaultProfileprofiles と同階層。

"alwaysShowTabs": false,
"showTerminalTitleInTitlebar": true,

デフォルトのターミナル設定

defaultProfile に上で追加した WSL のプロファイルの guid を指定した。

カラーテーマ

Visual Studio Code でも使っている Nord Wave からカラーパレットを移植した。

以下を schemes 以下に追加すると profiles 以下で指定するプロファイルで使えるようになる。

    {
      "name": "nord wave",
      "foreground": "#d8dee9",
      "background": "#212121",
      "colors": [
        "#3b4252",
        "#bf616a",
        "#a3be8c",
        "#ebcb8b",
        "#81a1c1",
        "#b48ead",
        "#88c0d0",
        "#e5e9f0",
        "#4c566a",
        "#bf616a",
        "#a3be8c",
        "#ebcb8b",
        "#81a1c1",
        "#b48ead",
        "#8fbcbb",
        "#eceff4"
      ]
    }

キーバインド変更

このままでは

  • C-t でタブを開く
  • C-w でタブを閉じる

の動作をしてしまい、
シェルの操作や tmux 等に割り当てたキーとバッティングしてしまうので都合が悪い。
特に C-w はシェルで前方語消去のキーなので
間違えてタブを閉じる事故が頻発してしまうのでなんとかしたかった。

キーバインド変更はいずれ設定できるようになると思われるが
現時点ではハードコーディングされていそうなので
src\cascadia\TerminalApp\CascadiaSettings.cpp のソースを変更して対応した。

Ctrl の代わりに Alt でタブを操作するようにしている。

 +    // keyBindings.SetKeyBinding(ShortcutAction::NewTab,
+    //                            KeyChord{ KeyModifiers::Ctrl,
+    //                                      static_cast<int>('T') });
     keyBindings.SetKeyBinding(ShortcutAction::NewTab,
-                               KeyChord{ KeyModifiers::Ctrl,
+                               KeyChord{ KeyModifiers::Alt,
                                          static_cast<int>('T') });

+    // keyBindings.SetKeyBinding(ShortcutAction::CloseTab,
+    //                            KeyChord{ KeyModifiers::Ctrl,
+    //                                      static_cast<int>('W') });
     keyBindings.SetKeyBinding(ShortcutAction::CloseTab,
-                               KeyChord{ KeyModifiers::Ctrl,
+                               KeyChord{ KeyModifiers::Alt,
                                          static_cast<int>('W') });

きっとすぐにキー変更機能もつくだろうからその時には上記変更は戻す予定。

おわりに

こんな感じになりました。

f:id:nishikawasasaki:20190514200958p:plain

なぜそこまでして使うのか……という気もしないでもないですが
新しいものが使ってみたい試してみたいというのと、
どんどん開発が進んでいくプロダクトに触れてみたいという感じです。

追記(2019/05/21)

git から最新ソース取得したところエラーが発生するようになった。 C++/WinRT 関連だったので NuGet で

Install-Package Microsoft.Windows.CppWinRT -Version 2.0.190506.1

を実行したところ解消した。