inf-ruby をちょっと使いやすくしてみた

最近 Atom をインストールしたにも関わらず相変わらず Emacs 使っててごめんなさい。

前々から pry や rails console を Emacs 上で立ち上げたいなぁと思っていて、前者に関しては emacs-pry を使ってみたことがあるんですが、terminal.el をベースに作られていて個人的には使い勝手が悪く感じました。
また、rails console のためだけに rinari をちょっとだけ使ってみたんですが、「まだ開発途中だよ」みたいなメッセージが表示される上にちょっと触っただけでバグだらけな印象を持ちました。

というわけで、inf-ruby を使ってみました。1
inf-ruby では補完に completing-read を使っているため、補完候補が複数ある状態で 1 回 TAB を押しても補完候補が表示されず、もう 1 回押してようやく補完候補が表示されます。更に、minibuffer 内に文字を入力して候補を絞り込んでから Return を押さないと最終的な候補が挿入されないため、補完を完了するまでに必要なステップが多いです。
これじゃ補完機能の意味がないですね!

completion-in-region を使った補完

拙作の nodejs-repl では comint-dynamic-simple-complete を使っていたんですが、

This function is obsolete since 24.1;
use `completion-in-region’ instead.

とのことだったので completion-in-region を使ってみました。 cf. https://github.com/abicky/inf-ruby/commit/06b6e3b

これで、複数候補がある場合でも 1 回 TAB を押すだけで候補が表示され、入力する場所が minibuffer に移ることもありません。
だいぶ快適です。

ただ、Mac にデフォルトで入っているレトロな Emacs では動作しないので注意が必要です。

ついでに inf-ruby-console-rails も直してみた

helm を使っていると inf-ruby-console-rails が正しく動作しませんでした。
これは helm の実装の問題と Emacs の仕様の問題があると思いますが、Emacs の鬼畜な仕様のせいで helm の実装を直したとしても起こり得る問題なので inf-ruby に pull-req を投げました。 cf. https://github.com/nonsequitur/inf-ruby/pull/52

あと、自分のリポジトリの方では bundler にも対応させています。

個人的な設定

https://github.com/abicky/inf-ruby を clone してきて、M-x update-autoloads-from-directories で inf-ruby のディレクトリを指定し、inf-ruby-autoloads.el を生成した上で、次のような設定を書いています。

(require 'inf-ruby-autoloads)
(defalias 'pry 'inf-ruby)
(setq inf-ruby-default-implementation "pry")

ではでは、素敵な Emacs ライフを!!

  1. rinari でも inf-ruby を使ってますがバージョンがだいぶ古いです