背景
私がEmacsを触り始めたころにEmacsモダン化計画 -かわEmacs編-という記事を読んで色々衝撃を受けましたが、あれからverticoというパッケージが登場し、補完パッケージの流れも多様になっています。
Emacsの次世代ミニバッファ補完UI
Emacsモダン化計画 -かわEmacs編-ではivyの紹介・拡張をメインにしていましたが、この記事ではverticoでも同様の実装を行ってみます。
nerd-icons・all-the-iconsのインストール
今回カーソルの設定で使用するフォントをインストールします。(nerd-icons・all-the-iconsのどちらかを使用します。)
各自のパッケージマネージャーでパッケージをインストールし、
(use-package nerd-icons :ensure t)
(use-package all-the-icons :ensure t)
下記のコマンドでフォントをインストールします。
M-x nerd-icons-install-fonts
M-x all-the-icons-install-fonts
実際に使用できるかを確認するため、
M-: (nerd-icons-faicon "nf-fa-hand_o_right")
M-: (all-the-icons-faicon "hand-o-right")
を実行し、手のマークが表示されるか確認します。
verticoの設定
フォントの準備が出来たら本題のverticoの設定を行います。
verticoのカーソルの設定はvertico wikiに記載されています。
実際の設定は下記のようになりました。
※all-the-iconsの場合は(nerd-icons-faicon "nf-fa-hand_o_right")
を
(all-the-icons-faicon "hand-o-right")
に置き換えてください。
(defvar +vertico-current-arrow t)
(cl-defmethod vertico--format-candidate :around
(cand prefix suffix index start &context ((and +vertico-current-arrow
(not (bound-and-true-p vertico-flat-mode)))
(eql t)))
(setq cand (cl-call-next-method cand prefix suffix index start))
(if (bound-and-true-p vertico-grid-mode)
(if (= vertico--index index)
(concat (nerd-icons-faicon "nf-fa-hand_o_right") " " cand)
(concat #("_" 0 1 (display " ")) cand))
(if (= vertico--index index)
(concat " " (nerd-icons-faicon "nf-fa-hand_o_right") " " cand)
(concat " " cand))))
(vertico-mode +1)
私はvertico-posframeも使用していますが、下のような見た目になります。
また、nerd-icons-completion、all-the-icons-completionを導入すると、find-file
等で下のような見た目になります。
おわりに
Emacsモダン化計画 -かわEmacs編-の登場からかなり経ち、流行のパッケージが変わったり、
Emacs本体に様々な機能が追加されたりしていますが、Emacsモダン化の記事は今でも参考になります。
今後もEmacsを使いやすく、改造していき記事を共有していけるようにしていきたいです。