Windows Terminal (v0.7 ～ v1.0) メモ

# 概要

Microsoftが開発しているWindows 10用のターミナルアプリケーションです。2019年12月現在プレビュー版version 0.7がリリースされています。
開発のマイルストーンは[Milestones - microsoft/terminal] (https://github.com/microsoft/terminal/milestones)で確認できます。

**2020/05/20追記**

2020/05/19にVersion 1.0がリリースされました。🎉
このリリースにより、GA版とPreview版という2種類のインストールタイプが出来ました。

※この記事のタイトルはもともと`Windows Terminal (Preview) メモ`だったのですが、GA版とPreview版ができたことにより、このままだと紛らわしくなるので`Windows Terminal (v0.7 ～ v1.0) メモ`と変更します。

**環境**

* Windows 10 Professional 1909
* Windows Terminal (Preview) v0.7 → v0.11 (RC2)
* PowerShell Core 6.2

**参考**

* [Windows Terminal User Documentation] (https://github.com/microsoft/terminal/blob/master/doc/user-docs/index.md)
    * [Profiles.json Documentation] (https://github.com/microsoft/terminal/blob/master/doc/cascadia/SettingsSchema.md)
    * [Editing Windows Terminal JSON Settings] (https://github.com/microsoft/terminal/blob/master/doc/user-docs/UsingJsonSettings.md)

# Version 1.0 リリース (2020/05/20追記)

Microsoftストアからpreview版をインストールしている場合、自動的にアップグレードされていると思います。

[Windows Terminal 1.0] (https://devblogs.microsoft.com/commandline/windows-terminal-1-0/)
![p.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/3998cc03-fd65-fa4f-f3ce-c8a00c181a5f.png)

また、GA(General Availability)版がリリースされたことにより、インストールできるタイプがGA版とPreview版に分かれました。
Microsoftストアでも別々に用意されていることが分かります。
Preview版は今後リリースされるVersion 2.0の機能が取り込まれていくバージョンになります。

**GA版**
![ga.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/266ee7e8-0b0d-4552-5e79-5e60128d1a7a.png)

**Preview版**
![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/f38081ff-a366-aa0d-85c1-60ce2b2945c5.png)

# ご注意ください

<font color="red"><strong>これ以降の内容はバージョンv0.7 から v0.11(RC2)までをもとにして作成されたものです。</strong></font>

# インストール

インストールはMicrosoftストアから行います。検索フィールドに"Windows Terminal"とキーワードを入力して検索し、検索結果に表示された"Windows Terminal (Preview)"をクリック、下図の画面で`入手`ボタンをクリックするとインストールが始まります。<font color="red"><strong>※上述しましたが2020/05/20以降は正式版とpreview版の2つが存在します。preview版は開発中のものなので気を付けてください。</strong></font>
2019年12月時点でインストールされるバージョンは0.7です。
![wt01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/340bfce6-d46b-9fa1-314d-96f8bdd2f645.png)

## 起動

スタートメニューに登録されているWindows Terminal (Preview)をクリックするとデフォルトのターミナルが起動します（デフォルトはWindows PowerShell）。
![wt02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/193b7da0-7be0-8744-1c2c-7f6b7dd3f6e3.png)

タイトルバーの下向き矢印（ドロップダウンメニュー）をクリックするとメニューが表示されます。ここにはそのPCで利用可能なターミナルが反映されていて、任意のターミナルを起動することができます。
私の使っているPCではCMDとWindows PowerShell (v5.1)の他に、PowerShell Core(v6.2)、WSLにUbuntu 18.04を導入しているので、図のようなメニューになっています。
![wt03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/10d24a11-771b-b846-b3e5-ac02c2dfde79.png)

## 設定

ドロップダウンメニューの`Settings`を選択、または<kbd>Ctrl + ,</kbd>を押下するとメモ帳で`profiles.json`という設定ファイルが開きます。
Windows Terminalの設定は`profiles.json`を編集することで行います。ファイルを保存するとすぐに反映されるので変更内容を確認しながら設定を行うことが可能です。（画面サイズ等、再起動しないと反映されない項目もあります。）
また、設定内容が正しくなかった場合は図のように画面上に原因箇所を表示してくれます。
![wt04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/e54a1c8a-c6c4-7d4e-e6e8-4035d734a578.png)

**初期のprofiles.json**

profiles.jsonは`Global Settings`、`Profiles`、`Color Schemes`、`Key Bindings`のセクションに分かれています。

```json
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    [
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
            "hidden": false,
            "name": "PowerShell Core",
            "source": "Windows.Terminal.PowershellCore"
        },
        {
            "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
            "hidden": false,
            "name": "Ubuntu-18.04",
            "source": "Windows.Terminal.Wsl"
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}
```

**defaults.json**

設定項目のデフォルト値は`defaults.json`というファイルで管理されています。このファイルの内容を確認するにはドロップダウンメニューのSettingsを<kbd>Alt</kbd>を押下しながらクリックします。

**ドロップダウンメニューのターミナルの並び順**

ドロップダウンメニューに表示されるターミナルの並び順はProfilesの記述順になっているので、ここを並び替えればメニューに反映されます。
またメニューの並び順に対応した<kbd>Ctrl + Shift + 1</kbd>、<kbd>Ctrl + Shift + 2</kbd>、<kbd>Ctrl + Shift + n</kbd>というショートカットキーがバインドされています。

**画面サイズ**

Global Settingsの`initialCols`および`initialRows`で画面サイズを指定します。

```json
"initialCols": 160,
"initialRows": 40,
```

**デフォルトターミナルの選択**

Global Settingsの`defaultProfile`に、デフォルトにしたい(Windows Terminalが起動したときに開く)ターミナルの`guid`を記述します。

```json
"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
```

**ターミナルのカスタマイズ**

profilesに各ターミナル毎の設定があるので、これを編集してターミナルのカスタマイズを行います。
下記はPowerShell Coreのカスタマイズ例です。

```json:編集前
{
    "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
    "hidden": false,
    "name": "PowerShell Core",
    "source": "Windows.Terminal.PowershellCore"
},
```

```json:編集後
{
    "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
    "hidden": false,
    "name": "PowerShell Core",
    "source": "Windows.Terminal.PowershellCore",
    "colorScheme": "Solarized Dark",
    "cursorShape": "underscore",
    "fontSize": 9,
    "startingDirectory": "C:\\dev"
},
```

下記はWSLのUbuntu-18.04のカスタマイズ例です。

```json:編集前
{
    "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
    "hidden": false,
    "name": "Ubuntu-18.04",
    "source": "Windows.Terminal.Wsl"
},
```

```json:編集後
{
    "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
    "hidden": false,
    "name": "Ubuntu-18.04",
    "commandline": "wsl.exe -d Ubuntu-18.04 -u rubytomato",
    "colorScheme": "One Half Dark",
    "cursorShape": "underscore",
    "fontSize": 9,
    "startingDirectory": "//wsl$/Ubuntu-18.04/home/rubytomato"
},
```

defaults.jsonにいくつかカラースキーマが定義されています。この定義済みカラースキーマを利用するには、profilesの"colorScheme"にカラースキーマ名を記述します。

|カラースキーマ名|
|:--------------|
|Campbell |
|Campbell Powershell |
|Vintage |
|One Half Dark |
|One Half Light |
|Solarized Dark |
|Solarized Light |

**カラースキーマのカスタマイズ**

カスタマイズしたカラースキーマをprofiles.jsonの"schemes"に記述して利用することができます。
色の指定は`#RRGGBB`または`#RGB`で行います。

```json
// Add custom color schemes to this array
"schemes": [
  {
    "name": "color scheme name",
    "foreground": "foreground color",
    "background": "background color",
    "black": "ANSI black",
    "red": "ANSI red",
    "green": "ANSI green",
    "yellow": "ANSI yellow",
    "blue": "ANSI blue",
    "purple": "ANSI purple",
    "cyan": "ANSI cyan",
    "white": "ANSI white",
    "brightBlack": "ANSI bright black",
    "brightRed": "ANSI bright red",
    "brightGreen": "ANSI bright green",
    "brightYellow": "ANSI bright yellow",
    "brightBlue": "ANSI bright blue",
    "brightPurple": "ANSI bright purple",
    "brightCyan": "ANSI bright cyan",
    "brightWhite": "ANSI bright white"
  }
],
```

# キーバインドの確認

defaults.jsonにいくつかキーバインドが設定されています。

**コピー/ペースト**

* コピー: <kbd>Ctrl + Shift + c</kbd>
* ペースト: <kbd>Ctrl + Shift + v</kbd> or <kbd>Ctrl + v</kbd>

選択しただけでテキストをコピーするにはGlobal Settingsの`copyOnSelect`をtrueにします。（デフォルトはfalse）
なお、<kbd>Alt</kbd>を押しながらマウスカーソルをドラッグするとブロック選択になります。

```
"copyOnSelect": true,
```

**タブの追加**

* <kbd>Ctrl + Shift + t</kbd>

デフォルトのターミナルが追加されます。

**タブの複製**

* <kbd>Ctrl + Shift + d</kbd>

アクティブになっているタブと同じターミナルが追加されます。

**ターミナルを選択**

* <kbd>Ctrl + Shift + Space</kbd>

ドロップダウンメニューが開きます。

**タブの移動**

* 次のタブ: <kbd>Ctrl + Tab</kbd>
* 前のタブ: <kbd>Ctrl + Shift + Tab</kbd>

**画面分割**

version 0.7で導入された機能で([Windows Terminal Preview v0.7 Release] (https://devblogs.microsoft.com/commandline/windows-terminal-preview-v0-7-release/)を参照)、画面を水平分割、垂直分割することができます。
※現時点では分割された画面のターミナルはデフォルトターミナルになります。

* 水平分割: <kbd>Alt + Shift + -</kbd>
* 垂直分割: <kbd>Alt + Shift + +</kbd>

分割画面の移動はそれぞれAlt + 矢印キーで行います。

* 右へ移動: <kbd>Alt + Right</kbd>
* 左へ移動: <kbd>Alt + Left</kbd>
* 上へ移動: <kbd>Alt + Up</kbd>
* 下へ移動: <kbd>Alt + Down</kbd>

分割画面のリサイズはそれぞれAlt + Shift + 矢印キーで行います。

* 分割線を右へ: <kbd>Alt + Shift + Right</kbd>
* 分割線を左へ: <kbd>Alt + Shift + Left</kbd>
* 分割線を上へ: <kbd>Alt + Shift + Up</kbd>
* 分割線を下へ: <kbd>Alt + Shift + Down</kbd>

**タブ/画面を閉じる**

* <kbd>Ctrl + Shift + w</kbd>

アクティブな分割画面を閉じます。画面が1つだけの場合はタブを閉じます。

**Windows Terminalを閉じる**

* <kbd>Alt + f4</kbd>

## キーバインドのカスタマイズ

profiles.jsonの"keybindings"にキーバインドを設定します。
基本的な書式は下記の通りでコマンドとバインドするキーをマッピングします。使用できるコマンドは[Implemented Keybindings] (https://github.com/microsoft/terminal/blob/master/doc/cascadia/SettingsSchema.md#implemented-keybindings)で確認できます。

```json
{
  "command": "コマンド名",
  "keys": [ "バインドするキー" ]
}
```

下記はファンクションキー(F1 - F3)を、タブの切り替えにバインドした例です。

```json
// Add any keybinding overrides to this array.
// To unbind a default keybinding, set the command to "unbound"
"keybindings": [
  { "command": { "action": "switchToTab", "index": 0 }, "keys": ["f1"] },
  { "command": { "action": "switchToTab", "index": 1 }, "keys": ["f2"] },
  { "command": { "action": "switchToTab", "index": 2 }, "keys": ["f3"] }
]
```

# sshクライアント

WindowsのOpenSSHクライアントもプロファイルに登録することができます。

**OpenSSH**

インストールされていると以下の場所にssh.exeが存在します。

```bat
> where ssh
C:\Windows\System32\OpenSSH\ssh.exe
```

以下はsshの接続先にAWS EC2を指定したときの例です。

**profiles.json**

profiles.jsonにssh.exe用のプロファイルを登録します。このプロファイルの`commandline`には以下の通りssh.exeと接続先を指定します。

```text:(一部抜粋)
"name": "aws",
"commandline": "C:\\Windows\\System32\\OpenSSH\\ssh.exe aws-ec2",
"icon" : "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png",
```

接続先は事前に.ssh/configに登録しておきます。

```
Host aws-ec2
  HostName ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
  User ec2-user
  Port 22
  IdentityFile "~/.ssh/keypair.pem"
```

メニューから登録したプロファイルを選択します。
![aws-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/d77abb19-cdd9-4c4a-eb55-dd61e87ca519.png)

![aws-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/11134a07-3d5a-f1c1-311d-5590bbfadb75.png)


# Windows Terminal Preview v0.8 Release

* 参考: [Windows Terminal Preview v0.8 Release] (https://devblogs.microsoft.com/commandline/windows-terminal-preview-v0-8-release/)

2020年1月14日にv0.8がリリースされました。
![about.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/c20ac345-c7a3-0ed7-4491-667827b7e603.png)

## Search

ターミナル内を検索する検索機能が追加されました。
デフォルトのキーバインドは <kbd>Ctrl + Shift + F</kbd> です。

## Retro Terminal Effects (Experimental)

実験的な機能です。

プロファイルに以下の設定を追加すると

```
"experimental.retroTerminalEffect": true
```

CRTディスプレイで表示したようの効果が得られます。
![crt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/107f0ae8-f38f-fffe-de78-43532e9c9d67.png)

## Enhanced Panes and Tabs Key Bindings

キーバインディングで新しいタブやペインを開くときに、任意のプロファイルを指定できるようになりました。
たとえば以下の設定は<kbd>Ctrl + A</kbd>で、新しいタブでcmdプロンプトがD:\\devで開きます。

```
"keybindings": [
    {
        "command": {
            "action": "newTab",
            "tabTitle": "dev",
            "profile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "startingDirectory": "D:\\dev"
        },
        "keys": ["ctrl+a"]
    }
]
```

## Custom Default Settings

デフォルトのプロファイル設定という概念が導入されました。
もともとはこのようなフォーマットですが

```
"profiles": [
    {
        // 個々のプロファイルの設定をここに記述
    },
    {
        // 個々のプロファイルの設定をここに記述
    },
    {
        // 個々のプロファイルの設定をここに記述
    }
]
```

デフォルトプロファイルの記述は以下のようになります。defaultsに同じ設定にしたい項目(たとえばフォントサイズやフォントファミリーなど）をまとめて記述できます。
個々のプロファイルに記述した設定はデフォルト設定をオーバーライドします。

```
"profiles": {
    "defaults": {
        // デフォルトのプロファイル
        // すべてのプロファイルに適用される設定をここに記述
    },
    "list": [
        {
            // 個々のプロファイルの設定をここに記述
            // 個別設定がオーバーライドされる
        },
        {
            // 個々のプロファイルの設定をここに記述
        },
        {
            // 個々のプロファイルの設定をここに記述
        }
    ]
}
```

## Tab Sizing

グローバルプロパティにtabWidthModeというタブの表示幅をコントロールする新しいプロパティが追加されました。
デフォルトは"equal"で、タブの表示幅は等分になります。
![equal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/c1b3e94e-d779-d1e8-9ce1-64a17377d0ba.png)

```
"tabWidthMode": "equal"
```

従来の挙動に戻したい場合は"titleLength"を設定します。タブがウィンドウ幅に収まらない場合は左右にスクロール用の`＜` `＞`が表示されます。
![titleLength.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/102ca917-d050-c524-e078-60b87b1ab8ca.png)

```
"tabWidthMode": "titleLength"
```

# Windows Terminal Preview v0.9 Release

* 参考: [Windows Terminal Preview v0.9 Release] (https://devblogs.microsoft.com/commandline/windows-terminal-preview-v0-9-release/)

2020年2月13日にv0.9がリリースされました。予定では次のリリースが正式版(v1.0)になるとのことです。
![version_0_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/a673d1ab-ff38-e36c-da89-21723a062533.png)

## Command Line Arguments

`wt.exe` (Windows Terminalの実行プログラム)が引数をサポートしました。引数に開始するディレクトリや使用したいプロファイルを指定することができます。

引数無しで実行するとデフォルトプロファイルが開きます。

```bat
> wt
```

**-d**

`-d`で開始するディレクトリを指定できます。
この例はカレントディレクトリをデフォルトプロファイルで開きます。

```bat
> wt -d .
```

**-p**

`-p`でプロファイルを指定できます。指定する値はprofiles.jsonで記述したプロファイル名です。(GUIDでも指定できます)
この例はカレントディレクトリをcmdプロファイル（つまりcmd.exe)で開きます。

```bat
> wt -d . -p "cmd"
```

なお、下記のように`-p`でプロファイルを指定せずにcmd.exeやwsl.exeなどのターミナルプログラムを直接指定すると、デフォルトプロファイル（配色やフォントなどの設定）で、そのプログラムが起動します。

```bat
> wt -d . wsl.exe
```

**new-tab**

複数のタブを開きたい場合はセミコロンで区切り、`new-tab`サブコマンドを使用します。
この例は1つ目のタブでカレントディレクトリをデフォルトプロファイルで、2つ目のタブをc:\devディレクトリをcmdプロファイルで開きます。

```bat
> wt -d . ; new-tab -d c:\dev -p "cmd"
```

**focus-tab**

複数のタブを開いたとき、デフォルトでは最後に開いたタブがフォーカスされていますが、任意のタブをフォーカスしたい場合は`focus-tab`サブコマンドと`-t`オプションでタブのインデックス（最初のタブが0）を指定します。
この例は3つのタブを開き、2番目のタブをフォーカスします。

```bat
> wt -d . ; new-tab -d c:\dev ; new-tab -d d:\dev ; focus-tab -t 1
```

**split-pane**

ターミナルを複数に分割する場合はセミコロンで区切り、`split-pane`サブコマンドを使用します。分割方向は`-V`(垂直分割)、`-H`(水平分割)です。

```bat
> wt -p "Ubuntu-18.04" ; split-pane -V -p "Ubuntu-18.04"
```

この例は最初に垂直に2分割し、右側をさらに水平に2分割します。

```bat
> wt -p "Ubuntu-18.04" ; split-pane -V -p "Ubuntu-18.04" ; split-pane -H -p "Ubuntu-18.04"
```

**new-tabとsplit-pane**

ターミナルの分割は現在のタブに対して行われるので、2つのタブを開きそれぞれ分割する場合は、下記のようにサブコマンドの実行順に注意する必要があります。
この例では2つのタブ(1つ目はデフォルトプロファイル、2つ目はUbuntu-18.04)を開き、1つ目のタブを2分割、2つ目のタブを3分割します。

```bat
> wt ; split-pane -V ; new-tab -p "Ubuntu-18.04" ; split-pane -V -p "Ubuntu-18.04" ; split-pane -H -p "Ubuntu-18.04"
```

## Auto-Detect PowerShell

端末に複数のPowerShellがインストールされていると、自動検出してプロファイルを構成してくれます。
※この機能は動作確認していません。

## Confirm Close All Tabs

複数のタブを開いている状態でWindows Terminalを終了しようとしたときに、すべてのタブを閉じてよいか確認ダイアログが表示されますが、この確認をするかprofiles.jsonで指定できるようになりました。
![all_tabs_close.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/d6a76330-cb11-aa6d-3251-72a231240655.png)

下記の`confirmCloseAllTabs`をfalseに設定すると確認されなくなります。

```text
"confirmCloseAllTabs": false,
```

## Other Improvements

いくつかの改善が追加されています。

・ CMDやPowerShellではウィンドウにファイルをドラッグ＆ドロップすると、カーソルの位置にそのファイルの絶対パスが表示されますが、この機能がWindows Terminalで開いたターミナルでもサポートされました。

・ <kbd>Ctrl + Ins</kbd>と<kbd>Shift + Ins</kbd>がデフォルトでコピーとペーストにバインドされました。

・ <kbd>Shift</kbd>を押しながらマウスを左クリックすると選択範囲が拡大します。

下のgifのように、マウスである範囲を選択した状態で、さらに<kbd>Shift</kbd>を押しながらマウスを左クリックするとその位置まで選択範囲が広がります。
![wt-expand.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/4d8d3cf9-873f-300a-e1d9-0b0177a7be8a.gif)

・ VS Code keys used for key bindings are now supported (i.e. "pgdn" and "pagedown" are both valid)!
> キーバインディングに使用されるVSコードキーがサポートされるようになりました（つまり、「pgdn」と「pagedown」の両方が有効です）。

※これは動作未確認です。


# Windows Terminal Preview v0.10 Release

* 参考: [Windows Terminal Preview v0.10 Release] (https://devblogs.microsoft.com/commandline/windows-terminal-preview-v0-10-release/)

2020年3月17日にv0.10がリリースされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/18e7b15c-01f5-3f89-028b-f29c3363c1a4.png)

## Mouse Input

ターミナルで開いたWSL上でマウス入力をサポートしました。こちらは参考にあげたリリースページをご覧ください。

## Duplicate Pane

`splitPane`に新しいオプション`splitMode`が追加されました。
これまではペインの複製にデフォルトのプロファイルが利用されていましたが、アクティブなプロファイルでペインを複製できるようになりました。

このキーバインドはアクティブなプロファイルがなんであれ、複製するペインのプロファイルはデフォルトプロファイルですが、

```
{ "command": { "action": "splitPane", "split": "auto"}, "keys": ["ctrl+a"] }
```

以下のように`"splitMode": "duplicate"`をキーバインドに追記すると、アクティブなプロファイルでペインが複製されます。

```text
{ "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate"}, "keys": ["ctrl+shift+a"] }
```

## Miscellaneous

<kbd>Ctrl + Shift + Wheel</kbd>でアクリルモードの透明度(`acrylicOpacity`)を動的に変更できるようになりました。
アクリルはprofiles.jsonで有効にできます（この機能は以前から）。たとえば以下のように設定すると

```text
"profiles": {
    "defaults": {
      "useAcrylic": true,
      "acrylicOpacity": 0.3
    },
}
```

ターミナルがアクティブなときに半透明になります。
![acrylic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/c7e32523-85e0-69af-8462-0856cc22a653.png)

この状態で<kbd>Ctrl + Shift</kbd>を押しながらマウスホイールをスクロールすると透明度が徐々に変わっていきます。

# Windows Terminal Preview v0.11 Release

* 参考: [Windows Terminal Preview v0.11 Release] (https://devblogs.microsoft.com/commandline/windows-terminal-preview-v0-11-release/)

2020年4月22日にv0.11がリリースされました。
![terminal_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/e45d2f23-e227-ed49-030a-c02ae5ece5d1.png)

## Localization

上の図のとおりローカライズされました。ただ下記引用のとおりまだ完全ではないようです。

> We are still working out the bugs with this, so please bear with us.
> \------------------------------------------------------------------
> まだバグの修正を行っていますので、ご容赦ください。

## Settings updates

設定ファイルに変更が加えられました。
バージョン0.11以前からTerminalを利用している場合は設定ファイルを再作成することを勧められています。
設定ファイルの再作成方法は以下の通りです。

1. 既存の設定ファイル(settings.json)をバックアップします。
2. Terminalを終了した状態で設定ファイル(settings.json)を削除します。
3. Terminalを起動すると設定ファイルが自動生成されます。
4. 自動生成された設定ファイルにバックアップした設定ファイルの内容を反映します。（ファイルを上書きするという意味ではなく、カスタマイズした内容を新しい設定ファイルに改めて適用します）

### Settings.json

いままでは設定ファイルは`profiles.json`という名前でしたが、このバージョンから`settings.json`になりました。
Terminal起動時に自動的にファイル名が更新されます。

### Cascadia Code

Terminalで自動生成されるプロファイルのデフォルトフォントにCascadia Codeが設定されます。
任意のフォントを利用したい場合は`fontFace`プロパティで指定します。

### Tango color schemes

ビルトインのカラースキーマに"Tango Dark"と"Tango Light"が追加されました。

### cursorColor

`cursorColor`プロパティでカーソルの配色を決めることができます。

### Copy and paste

`settings.json`を新しく作成しなおした場合、コピーとペーストはそれぞれ<kbd>Ctrl + C</kbd>と<kbd>Ctrl + V</kbd>にバインドされます。
新しく作成した`settings.json`には下記のキーバインドが設定されています。

```
// Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json.
// These two lines additionally bind them to Ctrl+C and Ctrl+V.
// To learn more about selection, visit https://aka.ms/terminal-selection
{ "command": { "action": "copy", "singleLine": false }, "keys": "ctrl+c" },
{ "command": "paste", "keys": "ctrl+v" },
```

なお、従来の<kbd>Ctrl + Shift + C</kbd>と<kbd>Ctrl + SHift + V</kbd>も有効です。

### Formatted copying

`settings.json`を新しく作成しなおした場合、global設定に`copyFormatting`というプロパティが追加されます。
デフォルトはfalseでプレーンテキストのみコピーします。trueに変えると、選択したテキストの色とフォントのフォーマットもクリップボードにコピーされます。 

### “Globals” namespace

設定ファイルの"globals"プロパティはサポートされなくなりました。"globals"プロパティを設定している場合は、その設定をルートへ移動させる必要があります。

### Application theme

global設定の`requestedTheme`プロパティは`theme`にリネームされました。

### Copying as a single line

`copyTextWithoutNewlines`と`trimWhitespace`コマンドが削除され、コピーするキーバインドに`singleLine`という引数が追加されました。trueにするとTerminalでコピーした複数行のテキストはペーストすると1行になります。

```
{ "command": { "action": "copy", "singleLine": true }, "keys": "ctrl+alt+c" }
```

### Creating a tab of a specific profile

特定のプロファイルで新しいタブを作成するキーバインドのフォーマットが変わりました。
`newTabProfile0`から`newTabProfile8`までのコマンドが削除され、`index`プロパティが追加されました。このプロパティに新しいタブのプロファイルのindexを指定します。indexはプロファイルの並び順で0から始まります。

```
{ "command": { "action": "newTab", "index": NUMBER }, "keys": "ctrl+shift+NUMBER" }
```

※indexプロパティのNUMBERには0～の数字を割り当て、keysプロパティのNUMBERには任意のキーを割り当てます。上記のままsettings.jsonに書いてもエラーになります。

### Navigating to a specific tab

タブ選択のキーバインドのフォーマットが変わりました。
`switchToTab0`から`switchToTab8`までのコマンドが削除され、`index`プロパティが追加されました。
このプロパティにタブのindexを指定します。indexはタブの並び順で一番左が0です。

```
{ "command": { "action": "switchToTab", "index": NUMBER }, "keys": "ctrl+alt+NUMBER" }
```

※indexプロパティのNUMBERには0～の数字を割り当て、keysプロパティのNUMBERには任意のキーを割り当てます。上記のままsettings.jsonに書いてもエラーになります。

### Splitting panes

`splitHorizontal`と`splitVertical`コマンドが削除され、ペインを分割するキーバインドのフォーマットが変わりました。

```
{ "command": { "action": "splitPane", "split": "horizontal"}, "keys": "alt+shift+-" },
{ "command": { "action": "splitPane", "split": "vertical"}, "keys": "alt+shift+plus" }
```

### Focusing between panes

`moveFocusDown`, `moveFocusUp`, `moveFocusLeft`, `moveFocusRight`コマンドが削除され、ペインのフォーカスを変えるキーバインドのフォーマットが変わりました。

```
{ "command": { "action": "moveFocus", "direction": "down" }, "keys": "alt+down" },
{ "command": { "action": "moveFocus", "direction": "up" }, "keys": "alt+up" },
{ "command": { "action": "moveFocus", "direction": "left" }, "keys": "alt+left" },
{ "command": { "action": "moveFocus", "direction": "right" }, "keys": "alt+right" }
```

### Resizing panes

`resizePaneDown`, `resizePaneUp`, `resizePaneLeft`, `resizePaneRight`コマンドが削除され、アクティブなペインのリサイズをするキーバインドのフォーマットが変わりました。

```
{ "command": { "action": "resizePane", "direction": "down" }, "keys": "alt+shift+down" },
{ "command": { "action": "resizePane", "direction": "up" }, "keys": "alt+shift+up" },
{ "command": { "action": "resizePane", "direction": "left" }, "keys": "alt+shift+left" },
{ "command": { "action": "resizePane", "direction": "right" }, "keys": "alt+shift+right" }
```

### Changing the font size

`decreaseFontSize`, `increaseFontSize`コマンドが削除され、フォントサイズを変更するキーバインドのフォーマットが変わりました。
テンキーパッドの<kbd>-</kbd>は効きません。またフォントサイズを大きくする場合は、実質<kbd>Ctrl + Shift + -</kbd>になります。

```
{ "command": { "action": "adjustFontSize", "delta": -1 }, "keys": "ctrl+-" },
{ "command": { "action": "adjustFontSize", "delta": 1 }, "keys": "ctrl+=" }
```

# 補足

## Windows Terminalのアップデート

インストールしたWIndows Terminalのアップデートは自動的に行われているようですが、新しいバージョンのリリース直後など、すぐにアップデートしたい場合は、Microsoft Storeから手動でアップデートします。
Microsoft Storeを起動してマイライブラリにアクセスすると、更新可能であれば下図のように表示されています。
”利用可能な更新プログラム”の右側のダウンロードアイコンをクリックするとアップデートが始まります。
![ms_store.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/b21420c4-9ab5-47ce-eb92-54a8ecda9a90.png)

## GUIDの発行

* 参考: [Generate a GUID in Windows 10 (Globally Unique Identifier)] (https://winaero.com/blog/generate-new-guid-in-windows-10/)

profile.jsonに新しいプロファイルを登録するとき、プロファイルを一意に識別するためのGUIDを設定する必要がありますが、下記のPowerShellコマンドで発行できます。

```powershell
> [guid]::NewGuid()

Guid
----
8240bd89-2c9e-4594-9877-18465af49581
```

## プロンプトのカスタマイズ

* 参考: [How to make a pretty prompt in Windows Terminal with Powerline, Nerd Fonts, Cascadia Code, WSL, and oh-my-posh] (https://www.hanselman.com/blog/HowToMakeAPrettyPromptInWindowsTerminalWithPowerlineNerdFontsCascadiaCodeWSLAndOhmyposh.aspx)

参考にあげたページで紹介されているPowerShell Core プロンプトのカスタマイズ例です。
この例の前提としてGit for Windowsがインストールされている必要があります。
※注意）このカスタマイズを行うとPowerShell Core単体で実行した場合のプロンプトの表示が少しおかしくなります。

![powerline.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/12f4454b-eeda-78f9-ba21-9e2d0a75cd6d.png)

### モジュールのインストール

PowerShell Coreを開き、下記コマンドを実行してposh-git、oh-my-posh、PSReadLineをインストールします。

```
Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser
Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck
```

### プロファイルの編集

コマンドラインに`$PROFILE`と入力して<kbd>Enter</kbd>を押すと、プロファイルの場所がわかります。

```
> $PROFILE
```

プロファイルをテキストエディタで開き、下記の行を追記します。
3行目はテーマで個人の好みに合わせて設定できます。この例では`Paradox`を使用しています。

```
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox
```

### フォントのインストール

デフォルトのCascadia Codeではプロンプトの文字が一部文字化けするので、Cascadia Code PLというフォントを[microsoft / cascadia-code] (https://github.com/microsoft/cascadia-code/releases)よりダウンロードしてインストールします。

Windows Terminalのprofiles.jsonを開き、使用するフォントをCascadia Code PLへ変更します。

```
"fontFace": "Cascadia Code PL",
```