次世代WindowsターミナルソフトWindows Terminal

# 次世代WindowsターミナルソフトWindows Terminal

Microsoftがモダンな次期ターミナルソフト(?)として、オープンソースソフトウェアで開発中
https://github.com/microsoft/terminal

## インストール
[GitHub](https://github.com/microsoft/terminal/releases)よりインストールバイナリ(msixbundle)を入手してインストールをする。
※ msixbundleインストーラーは、Windows 10 v1809 以降から対応しているので、必然的に1809以前は、verupしないと使用できない可能性。

以下、v0.9指定のものぐさインストール方法

```bat
REM When install
curl -k -L https://github.com/microsoft/terminal/releases/download/v0.9.433.0/Microsoft.WindowsTerminal_0.9.433.0_8wekyb3d8bbwe.msixbundle -O
powershell Add-AppPackage -path "Microsoft.WindowsTerminal_0.9.433.0_8wekyb3d8bbwe.msixbundle"
del "Microsoft.WindowsTerminal_0.9.433.0_8wekyb3d8bbwe.msixbundle"

REM When uninstall
REM powershell Remove-AppPackage -Package "Microsoft.WindowsTerminal_0.9.433.0_x64__8wekyb3d8bbwe"
```

あとは、wt.exe にパスが通ってるので、`wt` コマンドで起動可能(0.9以降より)

## Settings

Windows Terminal起動後、メニューより`Settings`で、`profiles.json`を弄って編集する。GUIは現状用意されていない。編集後の保存時にリアルタイムで設定は反映される。
設定ファイルは、ファイル更新監視されているようで、設定保存したタイミングで動的にすぐに反映される。
(尚、中身を見ると、`//`コメントのjsonファイルを使ってるので、JSON.parse()等でエラーが出るかもで、気持ち悪い気もしますが最近のJSONパーサー的(jsoncpp使ってるいるよう)にはアリなんですかね)

`profiles.json`の保存場所は以下へ保存されている
`%localappdata%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\profiles.json`
(8wekyb3d8bbweはランダムな文字列)


### デフォルト起動シェルの変更
デフォルト起動シェルは、PowerShellなので、cmdに変更したいとかの場合は、以下。
(jsonファイル内にcmd.exeのguidがあるので、そちらを後に書けば良い。個人的には、行を入れ替えればすぐに切り替え確認可能なので、以下のように同一ハッシュキーで別の値で上書きするスタイルが好き。)

```json
{
    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
}
```

### ダークモード

```json
{
    "requestedTheme": "dark",
}
```

### 文字列選択時にコピー
```json
{
    "copyOnSelect": true,
}
```

### フォント変更
デフォルトはConsolasに設定されているようだが、リガチャ対応の`Cascadia Code`(cascadia.ttf)もWindows Terminalの内部に同梱されている。好きなフォントで設定可能。またシェル毎に個別に設定変更可能

```json
{
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
            "fontFace": "Consolas",
            "fontFace": "Cascadia Code",
            "fontSize": 9
        },
    }
}
```

### Window透過設定
全シェル共通デフォルト設定以外にも、シェル毎に個別に設定変更可能

```json
{
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
            "useAcrylic": true,
            "acrylicOpacity": 0.5
        },
    }
}
```

### 背景画像設定
動画gifとかも設定できるが五月蠅いのでほどほどに。Opacityや、StretchModeを細かく設定可能
- ref: [How to customize the new Windows Terminal with Visual Studio Code - DEV Community 👩‍💻👨‍💻](https://dev.to/expertsinside/how-to-customize-the-new-windows-terminal-with-visual-studio-code-56b1)

```json
{
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
            "backgroundImage": "ms-appdata:///roaming/images/backgrounds/matrix.gif",
            // 直接画像ファイルの場合は、パス区切りは \ ではなく、 / に置き換えて設定
            "backgroundImage": "C:/temp/WallPaper.jpg",
            "backgroundImageOpacity": 0.3,
            "backgroundImageStretchMode": "uniform",
            "backgroundImageStretchMode": "uniformToFill",
            "backgroundImageStretchMode": "none",
            "backgroundImageStretchMode": "fill",
        },
    }
}
```

### ソフト内のデフォルト設定確認

そもそものソフト内のデフォルト設定は以下に同梱されており、直接確認も可能
`C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_0.9.433.0_x64__8wekyb3d8bbwe\defaults.json`


### コマンドライン引数に対応(v0.9以降)

元々、アプリストア特有のms-～URIスキーム対応等をするのかと思いきや、v0.9からは、コマンドライン引数と言うか、アプリエイリアス対応をしてきてexe直接実行にも対応している。

```bat
> where wt
C:\Users\user\AppData\Local\Microsoft\WindowsApps\wt.exe
```

### エスケープシーケンス対応

元々 cmd.exe では、完全なエスケープシーケンス対応がされていなかったが、Windows Terminal上のcmdではエスケープシーケンス対応も可能

```bat
chcp 65001 & curl ja.wttr.in
```

上記のようにchcpでコードページをUTF-8に変更してからだが、固定長フォントで見れば綺麗に見えるようになった💪

![WindowsTerminal01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325393/e97301a7-6b05-cc07-509d-8a36191e8158.png)


### Vim の :terminal から wt.exe
Vimは、:terminal で他のシェル(bash, powershell, ubuntu等)を起動する事も可能だが、
v0.9 以降、wt.exe が同梱されるようになったので、:termも対応出来ているのか確認してみたが、
`:term wt` で実行してもGUIなWindows Terminalが普通に起動するだけで、Vim内表示出来る対応が出来ていない。
(コンソール系APIに対応していないWindows Terminal側の問題かな)

## Refs
- [Windows Terminal Tips - Qiita](https://qiita.com/whim0321/items/6a6b11dea54642bd6724#window%E9%80%8F%E9%81%8E%E8%A8%AD%E5%AE%9A)