日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

補完候補のポップアップ

久々に Emacs の設定に手を付けるなあ。

今時の開発環境だと補完は最早デフォルトで持っていると言っても良くて Emacs もデフォルトで持ってはいるんだが、追加キー操作必要なのはともかくとしてウィンドウ分割して別バッファに出す辺りが昔触っていた時も気に入らなかった。
今だとポップアップするような拡張 elisp あるんじゃと思って探したらあった。

Auto Complete Mode - GNU Emacsのための最も賢い自動補完機能

github の Tag 見たら最新安定版が 2 年前なのか。

auto-complete.el

自動補完の機能を提供する elisp 拡張。これ自体は最低限の補完リストと枠組みを提供するだけで
ある言語なりの補完に特化したものが欲しい場合は別途そちらを用意する。
Clojure だと ac-nrepl.el で提供されているがそちらのインストールは後述。

インストール

el-get 入れてればパッケージリストにあるので M-x el-get-install -> auto-complete でインストール完了。

設定

init.el に以下追記して再起動。

(require 'auto-complete-config)
(ac-config-default)

動作確認

*scratch* バッファで def とかでも書くと何かそれっぽい動きすれば OK。
動作イメージはググったり公式サイト見ればいくらでもあるのでそちらで。

ac-nrepl.el

公式は↓
purcell/ac-nrepl · GitHub

インストール

こちらも el-get で。M-x el-get-install -> ac-nrepl とするのみ。

設定

init.el に以下追記して再起動。

(require 'ac-nrepl)
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
(eval-after-load "auto-complete"
  '(add-to-list 'ac-modes 'nrepl-mode))

・・・すれば OK のはずだったんだが、原因は良く分からないが clojure-mode 読み込めなくなった。
ac-nrepl.el 入れる前は普通に使ってたのになあ。

仕方ないので .emacs.d 以下に拡張 elisp は全て入れてあるのでサブディレクトリも含めて全て load-path に入れてやる事に。

具体的には init.el の最初の方に以下のコードを追記する。

(defun recursive-add-load-path (&rest paths)
  (dolist (path paths path)
    (let ((default-directory path))
      (normal-top-level-add-subdirs-to-load-path))))
(recursive-add-load-path (expand-file-name "~/.emacs.d/"))

こういうのがあるから emacs 設定には余り手を出したくないんだよなと思いつつも動作確認へ。

動作確認

適当な leiningen プロジェクト内の clj ファイルを開いて C-c M-j し REPL を立ち上げる。
んで、(def まで打ったりすると、おお、色々出てきた。ちょっと待つと doc まで出る。
REPL 上と Clojure ファイル上で若干挙動が違うのが気にはなるが、何となく想像もつくし
気になり出したらまた調べる事にしよう。

若干手間取ったものの導入するだけの価値はありました^^