Humanity

Edit the world by your favorite way

macOS のターミナルエミュレーター環境放浪記

ぶっちゃけ vim の :terminal から色々起動したりしてるのでターミナルエミュレーターに求めるものはあんまりないのだけど、

  • タブが使えること (いちおう)
  • 速いこと

ということでおそらく最速らしい Alacritty をインストールしてみた。

ちなみに日本語は現在使えません。

Full unicode support · Issue #306 · jwilm/alacritty · GitHub

できる人もいるみたいですが、自分の環境 (macOS デフォルトの日本語 IM) だと全く日本語を入力できませんでした。

Cannot input japanese characters · Issue #1101 · jwilm/alacritty · GitHub

あと変換中もキーを処理しちゃうので↑とか↓のキーを押すと bash に渡って直前の履歴を表示したりします。

macOS: unexpected characters get deleted when using backspace in Pinyin input method · Issue #1606 · jwilm/alacritty · GitHub

こんな感じで日本語を使うにはなかなかつらそうですが、ちょっと試した限り描画には特に問題なさそうな感じだったので、しばらく vim + eskk と併用してしのぐことにしました。 (vim 以外で日本語を入力したかったら vim のバッファで入力してからコピペすることにする) もともとターミナルで日本語をそんな入力することもないのでおそらく大丈夫なはず。

インストール

$ brew cask install alacritty

セットアップ

Ctrl + [ が Esc として認識されない

設定しない限りは自動で認識はしないっぽい。 自由度は高いとはいえ通常のターミナルエミュレーターっぽい動きをするオプションとかないんでしょうか (あったら教えてください)。

という訳で

Keyboard mappings · jwilm/alacritty Wiki · GitHub

を参考に

/Applications/Alacritty.app/Contents/MacOS/alacritty --print-events | grep KeyboardInput

してキーコードのイベントを見て、 [ がどういう名前で呼ばれているか見る。 (grep しているのは大量にイベントが出力されるので)

見るべきは Some(...) で囲まれている中身。

[2019-08-12 05:25] [INFO] glutin event: WindowEvent { window_id: WindowId(Id(140290951381856)), event: KeyboardInput { device_id: DeviceId(DeviceId), input: KeyboardInput { scancode: 59, state: Pressed, virtual_keycode: Some(LControl), modifiers: ModifiersState { shift: false, ctrl: true, alt: false, logo: false } } } }
[2019-08-12 05:25] [INFO] glutin event: WindowEvent { window_id: WindowId(Id(140290951381856)), event: KeyboardInput { device_id: DeviceId(DeviceId), input: KeyboardInput { scancode: 30, state: Pressed, virtual_keycode: Some(LBracket), modifiers: ModifiersState { shift: false, ctrl: true, alt: false, logo: false } } } }

Ctrl + [ を押すと、Control キーが押されたというイベントに加えて LBracket が押されたと書いてあるのでそれを Esc にマッピングする。

設定ファイル (自分は $HOME/.config/alacritty/alacritty.yml に追加した) の key_bindings に以下を追加。

- { key: LBracket, mods: Control, chars: "\e" }

ベンチマーク (雑)

雑すぎるベンチマークなので参考にしないでください。 ただ個人的に乗り換えるきっかけにはなりました。

bash

$ time yes | head -1000000
# iTerm
real    0m2.701s
user    0m0.280s
sys     0m0.433s

# macOS 標準の「ターミナル」
real    0m1.009s
user    0m0.254s
sys     0m0.424s

# Alacritty
real    0m0.759s
user    0m0.249s
sys     0m0.494s

ベンチマークと言いつつ環境についての記載がないってどういうこと?って言われそうですが上記の通りです許して… (単なる比較として見てください。ちゃんとやるなら出力 (描画) のみじゃなくキー入力についてとかも必要そう) 自己満足かもしれないけど自分もデフォルト以外のナウいターミナルエミュレータ使いたかった () っていうのもある。 まぁ個人のブログなので… (それを言ったら終わり)