2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Emacs on WSL2 のための Alacritty 導入メモ

Last updated at Posted at 2023-01-03

はじめに

プライベートで利用している WSL2 環境で Windows terminal が頻繁にクラッシュするようになってしまったので、試しに他のターミナルエミュレーターを試そうということで、Alacritty を導入してみた時のメモです。

要件

WSL2 上で動作する Emacs (no-window mode) で Org-mode の編集が問題なく行えること

Alacritty のインストール

Windows 公式のパッケージマネージャーである winget で Alacritty をインストールする。 Powershell で以下を実行する

winget install Alacritty

Alacritty の設定ファイルパス

https://github.com/alacritty/alacritty/wiki#windows にある通り、 %APPDATA%\alacritty\alacritty.yml に設定を記述した YAML ファイルを置くと、その設定が読み込まれる。 自分は Windows のシェル周りに詳しくないので %APPDATA% がどこを指すのか理解するのに苦労したものの、最終的には powershell で以下のようにすれば確認できる (コマンドプロンプトだと違うらしい)。

echo $env:appdata

Alacritty の設定

基本的には以下の記事にある設定を拝借した。

WSL を起動するための設定

今回重要なのは shell: 以下の設定。これを入れないと Alacritty 起動時に Powershell が起動してしまう。 -d 以下は自分が利用しているディストリビューションの名前に変更する。 分からない場合は、Powershell で wsl -l を実行するとディストリビューションの一覧がでるのでそれを見てみるとよさそう。

見た目とマウスイベントに関する設定

上記の記事にある設定の残りの部分は見た目とマウスイベントに関する設定なのでお好みで。 ただ、以下の 2 点は自分の環境では動作せずコメントアウトした。

  • font: の設定は自分の環境に該当のフォントが無いと言われてエラーになった。 おそらく環境にあるフォントを指定すればいいのだと思う。 ただ自分は差し当たりフォントにこだわりはなく、またフォントを調べるのが面倒だったのでコメントアウトした。

  • background_opacity: の設定は deprecated だと言われた (今は window.opacity らしい)。 これも言われた通りフィールド名を直せばいいと思うのだが、特に透過率にもこだわりがなかったのでコメントアウトしてしまった。

キーバインドに関する設定

これまでの設定で WSL2 上で Emacs を起動するところまでは問題なくできるようになる。 Emacs でよく利用するいくつかのキーバインドが正しく Emacs に送られない。 具体的には

  1. Alt+何か (M-何か) が全滅
  2. Ctrl+Space (C-SPC) (Markset できない)
  3. Ctrl+/ (C-/) (Undo できない)

が動かず大変由々しき状態である。

このうち、1 と 2 はこの issue のコメント の通りにやるとだいたい解決する。 内容は Alt+何かのキーバインドにすべて ESC+何かのキーのシーケンスを割り当てるという大変漢らしい解決策になっている。 ただこの設定では Alt-Enter と3 の Ctrl+/ が相変わらず正しく動作しないので、以下を追記して対応する。

- { key: Return,    mods: Alt,       chars: "\x1b\r"                      } # ESC+CR
- { key: Slash,     mods: Control,   chars: "\x1f"                        } # US

\x1b が ASCII の ESC になり、 \r が Enter (CR) に相当する。 また、 \x1f は ASCII の US で、これは Ctrl+_ に相当する (Emacs では Ctrl+_ でも undo する)。

おわりに

ターミナルエミュレーターを Alacritty に変えてから今のところクラッシュせず動作している。 結果、Alacritty を上記の通り導入することで快適な Emacs ライフを取り戻すことができた。 (ところで、なぜうちの Windows Terminal はああもクラッシュするのだろうか… 🤔 Event viewer とか見たけど原因わからず…)

Appendix

Alacritty の設定ファイルのうち、今回導入時に追記したもの (紹介した記事と重複するところは省いてます)。

shell:
  program: /Windows/System32/wsl.exe ~ -d Ubuntu

key_bindings:
  - { key: A,         mods: Alt,       chars: "\x1ba"                       }
  - { key: B,         mods: Alt,       chars: "\x1bb"                       }
  - { key: C,         mods: Alt,       chars: "\x1bc"                       }
  - { key: D,         mods: Alt,       chars: "\x1bd"                       }
  - { key: E,         mods: Alt,       chars: "\x1be"                       }
  - { key: F,         mods: Alt,       chars: "\x1bf"                       }
  - { key: G,         mods: Alt,       chars: "\x1bg"                       }
  - { key: H,         mods: Alt,       chars: "\x1bh"                       }
  - { key: I,         mods: Alt,       chars: "\x1bi"                       }
  - { key: J,         mods: Alt,       chars: "\x1bj"                       }
  - { key: K,         mods: Alt,       chars: "\x1bk"                       }
  - { key: L,         mods: Alt,       chars: "\x1bl"                       }
  - { key: M,         mods: Alt,       chars: "\x1bm"                       }
  - { key: N,         mods: Alt,       chars: "\x1bn"                       }
  - { key: O,         mods: Alt,       chars: "\x1bo"                       }
  - { key: P,         mods: Alt,       chars: "\x1bp"                       }
  - { key: Q,         mods: Alt,       chars: "\x1bq"                       }
  - { key: R,         mods: Alt,       chars: "\x1br"                       }
  - { key: S,         mods: Alt,       chars: "\x1bs"                       }
  - { key: T,         mods: Alt,       chars: "\x1bt"                       }
  - { key: U,         mods: Alt,       chars: "\x1bu"                       }
  - { key: V,         mods: Alt,       chars: "\x1bv"                       }
  - { key: W,         mods: Alt,       chars: "\x1bw"                       }
  - { key: X,         mods: Alt,       chars: "\x1bx"                       }
  - { key: Y,         mods: Alt,       chars: "\x1by"                       }
  - { key: Z,         mods: Alt,       chars: "\x1bz"                       }
  - { key: A,         mods: Alt|Shift, chars: "\x1bA"                       }
  - { key: B,         mods: Alt|Shift, chars: "\x1bB"                       }
  - { key: C,         mods: Alt|Shift, chars: "\x1bC"                       }
  - { key: D,         mods: Alt|Shift, chars: "\x1bD"                       }
  - { key: E,         mods: Alt|Shift, chars: "\x1bE"                       }
  - { key: F,         mods: Alt|Shift, chars: "\x1bF"                       }
  - { key: G,         mods: Alt|Shift, chars: "\x1bG"                       }
  - { key: H,         mods: Alt|Shift, chars: "\x1bH"                       }
  - { key: I,         mods: Alt|Shift, chars: "\x1bI"                       }
  - { key: J,         mods: Alt|Shift, chars: "\x1bJ"                       }
  - { key: K,         mods: Alt|Shift, chars: "\x1bK"                       }
  - { key: L,         mods: Alt|Shift, chars: "\x1bL"                       }
  - { key: M,         mods: Alt|Shift, chars: "\x1bM"                       }
  - { key: N,         mods: Alt|Shift, chars: "\x1bN"                       }
  - { key: O,         mods: Alt|Shift, chars: "\x1bO"                       }
  - { key: P,         mods: Alt|Shift, chars: "\x1bP"                       }
  - { key: Q,         mods: Alt|Shift, chars: "\x1bQ"                       }
  - { key: R,         mods: Alt|Shift, chars: "\x1bR"                       }
  - { key: S,         mods: Alt|Shift, chars: "\x1bS"                       }
  - { key: T,         mods: Alt|Shift, chars: "\x1bT"                       }
  - { key: U,         mods: Alt|Shift, chars: "\x1bU"                       }
  - { key: V,         mods: Alt|Shift, chars: "\x1bV"                       }
  - { key: W,         mods: Alt|Shift, chars: "\x1bW"                       }
  - { key: X,         mods: Alt|Shift, chars: "\x1bX"                       }
  - { key: Y,         mods: Alt|Shift, chars: "\x1bY"                       }
  - { key: Z,         mods: Alt|Shift, chars: "\x1bZ"                       }
  - { key: Key1,      mods: Alt,       chars: "\x1b1"                       }
  - { key: Key2,      mods: Alt,       chars: "\x1b2"                       }
  - { key: Key3,      mods: Alt,       chars: "\x1b3"                       }
  - { key: Key4,      mods: Alt,       chars: "\x1b4"                       }
  - { key: Key5,      mods: Alt,       chars: "\x1b5"                       }
  - { key: Key6,      mods: Alt,       chars: "\x1b6"                       }
  - { key: Key7,      mods: Alt,       chars: "\x1b7"                       }
  - { key: Key8,      mods: Alt,       chars: "\x1b8"                       }
  - { key: Key9,      mods: Alt,       chars: "\x1b9"                       }
  - { key: Key0,      mods: Alt,       chars: "\x1b0"                       }
  - { key: Space,     mods: Control,   chars: "\x00"                        } # Ctrl + Space
  - { key: Grave,     mods: Alt,       chars: "\x1b`"                       } # Alt + `
  - { key: Grave,     mods: Alt|Shift, chars: "\x1b~"                       } # Alt + ~
  - { key: Period,    mods: Alt,       chars: "\x1b."                       } # Alt + .
  - { key: Key8,      mods: Alt|Shift, chars: "\x1b*"                       } # Alt + *
  - { key: Key3,      mods: Alt|Shift, chars: "\x1b#"                       } # Alt + #
  - { key: Period,    mods: Alt|Shift, chars: "\x1b>"                       } # Alt + >
  - { key: Comma,     mods: Alt|Shift, chars: "\x1b<"                       } # Alt + <
  - { key: Minus,     mods: Alt|Shift, chars: "\x1b_"                       } # Alt + _
  - { key: Key5,      mods: Alt|Shift, chars: "\x1b%"                       } # Alt + %
  - { key: Key6,      mods: Alt|Shift, chars: "\x1b^"                       } # Alt + ^
  - { key: Backslash, mods: Alt,       chars: "\x1b\\"                      } # Alt + \
  - { key: Backslash, mods: Alt|Shift, chars: "\x1b|"                       } # Alt + |```
  - { key: Return,    mods: Alt,       chars: "\x1b\r"                      }
  - { key: Slash,     mods: Control,   chars: "\x1f"                        }
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?