はじめに
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 のとおったところにコピーしても動作した。
ビルド
- cmd.exe で git clone した Windows Terminal のディレクトリへ移動する
git submodule update --init --recursive
nuget restore OpenConsole.sln
- Windows Terminal のソースにある
OpenConsole.sln
を開いて Visual Studio を起動する。 - 日本語 Windows だと文字コードの問題があるので以下のソースを UTF-8 BOM 付きで保存しなおす。
diff は下の方に。
src\tools\vtpipeterm\main.cpp
src\inc\test\CommonState.hpp
src\terminal\parser\ut_parser\InputEngineTest.cpp
- 同様に
src\tools\vtpipeterm\main.cpp
の UTF-8 な文字列にu8
を追加する。 - Visual Studio のメニューバー下で「Release」「x64」「CascadiaPackage」を選択
- Visual Studio のメニューから「ビルド」→「ソリューションのビルド」を選択してビルド開始
- 無事ビルドが成功したら 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" }
タブ関連
タイトルバーの中にタブを表示したかったので以下を追加。
追加位置は defaultProfile
や profiles
と同階層。
"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') });
きっとすぐにキー変更機能もつくだろうからその時には上記変更は戻す予定。
おわりに
こんな感じになりました。
なぜそこまでして使うのか……という気もしないでもないですが
新しいものが使ってみたい試してみたいというのと、
どんどん開発が進んでいくプロダクトに触れてみたいという感じです。
追記(2019/05/21)
git から最新ソース取得したところエラーが発生するようになった。 C++/WinRT 関連だったので NuGet で
Install-Package Microsoft.Windows.CppWinRT -Version 2.0.190506.1
を実行したところ解消した。