Open8

僕の Emacs はまだ 7 回の変身を残している (はず)

toyboot4etoyboot4e

極めたい……!

Emacs の紹介兼設定更新のスクラップです。

toyboot4etoyboot4e

利用パッケージ

現状把握から始めます。

基本

leaf, lsp-mode, minadware です。

項目 パッケージ
プロファイル切り替え chemacs2
パッケージ管理 leaf.el + leaf-manager.el (package.el, straight.el), auto-package-update
completing-read consult + vertico
LSP lsp-mode, lsp-ui
補完 corfu

UI 強化

こだわりが出ると思います。

項目 パッケージ
キーバインド evil, hydra
スニペット tempel
モードライン doom-modeline + minions
Git git-gutter, magit + forge, blamer
プロジェクト projectile
ウィンドウ tab-bar-mode, (tmux)
ウィジェット neotree, centaur-tabs

改善の余地あり

項目 パッケージ
アイコン (TUI) なし
シェル vterm 単体
VSCode の pane 探しています
toyboot4etoyboot4e

Distribution は使わないのか

SpacemacsDoom Emacs は Emacs のリッチな設定セットです。一部の人から絶大な人気を誇ります。

しかし欠点もあります。

  • 独自 DSL を多用しており、何が起こっているのか分からない
  • パッケージの選択が意外に不自由

各 distribution のデフォルト設定が合わなければ、 1 から設定ファイルを作った方が実は簡単かもしれません。

toyboot4etoyboot4e

変身 1: Sticky imenu

VSCode の Sticky Scroll が話題になりました。実は Vim にも Emacs にも同じ機能があるみたいです。へぇ……。より理想的な UI が無いか考えたところ、アウトライン表示のハイライトと現在のソース位置を連動させたいと思いました。

できました (gist)。他力本願です 🙏 なお imenu 項目はソースに出てきた順番で表示します:

(leaf lsp-ui-imenu
    :ensure nil
    :custom (lsp-imenu-sort-methods . '(position))

また 1 つ欲を満たしてしまった…… (イキり)

toyboot4etoyboot4e

変身 2: サイドバーのバッファグループ

上記 lsp-ui-mode-imenuneotreecentaur-tabs のバッファグループにまとめてみました:

改めてサイドバーのウィジェットを作ったわけではありません。効率良し!

@ から始まるバッファは、自動的にサイドバーのバッファ一覧に追加されます。今後のウィジェット追加も簡単そうです。

toyboot4etoyboot4e

変身 3: ボトムバーのバッファグループ

サイドバーができるなら、ボトムバーだって作れます。画面端にウィンドウを作る関数があります (display-buffer-in-side-window):

(display-buffer-in-side-window buffer '((side . bottom)))

これにより、 vterm*scratch* 風のバッファを画面下部に表示できます:

これでほぼ VSCode に匹敵しました! 欠点は、ボトムバーが全く要らないことですね…… (tmux が上位互換です)

LSP の診断情報などは minibuffer で表示・検索します。 embark を使えば保存・再表示もできそうです。

toyboot4etoyboot4e

変身 5: ハイスペック PC の購入

起動が爆走になります。結局これが一番効果ありました……!