JupyterLabのショートカットキーを設定する方法

ここでは[JupyterLab](https://github.com/jupyterlab/jupyterlab)のショートカットキー設定方法についてメモっておきます。
[jupyter notebook](http://jupyter.org/)だとショートカットキーを設定するUIが付属しているのですがLabの方はJSONで設定してあげる必要があるようです。

# 1. ショートカットキー無しの操作例

ここでは、notebookのセルで実行されたコードのアウトプットをコマンドパレットを使ってクリアしてみます。

![手動削除バージョン.gif](https://qiita-image-store.s3.amazonaws.com/0/180118/075a168c-3572-ba76-77d3-cda011213361.gif)

予めショートカットキーが設定されているものもありますが、自分なりのカスタマイズをしたい時ってありますよね。
以下では、JupyterLabのショートカットにキーを割り当てる方法について説明します。

# 2. ショートカットキー設定方法

## 2-1. Advanced Settings Editorを開く

`Settings` をクリックして `Advanced Settings Editor` を開きます。

![スクリーンショット 2018-09-23 17.38.35.png](https://qiita-image-store.s3.amazonaws.com/0/180118/a6a69178-d77e-839f-8d16-0fb214079dfa.png)

## 2-2. Keyboard Shourcutsを開く

`Keyboard Shourtcuts` をクリックします。

![スクリーンショット 2018-09-23 17.40.11.png](https://qiita-image-store.s3.amazonaws.com/0/180118/d48b76ae-bbb7-31b2-b6fb-ef59fdbcef98.png)


## 2-3. ショートカット設定例

### 2-3-1. Clear All Outputsのショートカット例

以下の例ではキーボードで `Q` キーを押すとClear all Outputsが実行されます。

```json
{
  "notebook:clear-all-outputs": {
    "command": "notebook:clear-all-cell-outputs",
    "keys": [
      "Q"
    ],
    "selector": ".jp-Notebook:focus"
  }
}
```

ショートカットキーが設定されると右側に対象のキーが表示されるようになります。

![スクリーンショット 2018-09-23 17.46.32.png](https://qiita-image-store.s3.amazonaws.com/0/180118/d817941b-0588-e738-5b81-49f66cab56fe.png)

以下の例ではキーボードで `Shift + C` キーを同時押しするとClear all Outputsが実行されます。

```json
{
  "notebook:clear-all-outputs": {
    "command": "notebook:clear-all-cell-outputs",
    "keys": [
      "Shift C"
    ],
    "selector": ".jp-Notebook:focus"
  }
}
```

![スクリーンショット 2018-09-23 17.49.29.png](https://qiita-image-store.s3.amazonaws.com/0/180118/67f601ac-ecd6-7ff2-c4f1-34590628b5c8.png)

以下の例ではキーボードで `C` を2回連続で押すとClear all Outputsが実行されます。

```json
{
  "notebook:clear-all-outputs": {
    "command": "notebook:clear-all-cell-outputs",
    "keys": [
      "C",
      "C"
    ],
    "selector": ".jp-Notebook:focus"
  }
}
```

![スクリーンショット 2018-09-23 17.51.56.png](https://qiita-image-store.s3.amazonaws.com/0/180118/d8c6bdad-43e4-f28e-253e-cf76d229004e.png)

## 2-4. ショートカット動作例

![便利なショートカット.gif](https://qiita-image-store.s3.amazonaws.com/0/180118/e58738c8-fba2-435f-dd4c-04247ea6aa28.gif)

## 2-5. 複数設定する場合の例

```json
{
  "notebook:clear-all-outputs": {
    "command": "notebook:clear-all-cell-outputs",
    "keys": [
      "C",
      "C"
    ],
    "selector": ".jp-Notebook:focus"
  },

  "notebook:kernel-restart": {
    "command": "notebook:restart-kernel",
    "keys": [
      "K",
      "R"
    ],
    "selector": ".jp-Notebook:focus"
  }
}
```

## 2-6. パラメーター説明

|   項目   |                                              内容                                              |
|----------|------------------------------------------------------------------------------------------------|
| notebook | ショートカットの名前、識別できる任意の名前を設定する                                           |
| command  | 実行するコマンドを指定する(<font color=#FF0000>#1</font>)                                      |
| keys     | ショートカットで使用するキーを指定する                                                         |
| selector | 実行対象を指定する、例えば `.jp-Notebook:focus` だとフォーカスしているnotebookに対して実行する |

<font color=#ff0000>#1. </font>実行するコマンドはコマンドパレットで表示される名前とは違います。一覧は以下のソースにあるので確認して適切なものを設定してください。
[https://github.com/jupyterlab/jupyterlab/blob/7e67f49160e185b93bfc251c05de050dd65524a6/packages/notebook-extension/src/index.ts#L69](https://github.com/jupyterlab/jupyterlab/blob/7e67f49160e185b93bfc251c05de050dd65524a6/packages/notebook-extension/src/index.ts#L69)

# 3. 最後に

デフォルトで設定されているキーと被るものは使えないので確認して設定しましょう。(デフォルトを上書きしてしまえば使えるかもしれない？[未確認])
ショートカットをJSONで自由に設定できるのでカーネルの再起動や変更も一発で出来てしまうのがとても便利だと感じました :)

# 4. 参考

[https://stackoverflow.com/questions/49280261/jupyter-lab-shortcuts](https://stackoverflow.com/questions/49280261/jupyter-lab-shortcuts)