EmacsでRubyを実行するキーバインド作った

この記事のコマンドを使うより、quickrun.elの方が圧倒的に良いのでこちらを使うべし。
@see quickrun.elで開発効率アップ - syohex’s diary
@see GitHub - syohex/emacs-quickrun: Run command quickly. This packages is inspired quickrun.vim
<<<<



Rubyをそろそろあたっておこうと思ってEmacsの環境を構築していたら、なんだかバッファ全体を評価して実行する方法が見つからなかった。選択したリージョンを実行する方法ならあった。

[Emacs]EmacsでRubyを実行

上のリンクのコードを改造して、バッファ全体を実行するキーバインドで、こんなのができた。

(defun execute-ruby-whole-buffer ()
  (interactive)
  (let (buf)
    (save-excursion
      (setq buf (get-buffer-create "*result ruby execution*"))
      (mark-whole-buffer)
      (call-process-region (region-beginning) (region-end) "ruby" nil buf nil)
      (display-buffer buf))))

(define-key ruby-mode-map (kbd "C-7")'execute-ruby-whole-buffer)

どうもキーバインドは、どこの割り当てが最適かがよくわからない...。とにかくこれでバッファ全体を*result ruby execution*に出力することができる。キーバインドを変更したい場合は、define-keyの部分の"C-7"を自分の好きなキーに割り当てれば良い。


このコードのsave-excurtionは、mark-whole-bufferがバッファの先頭に飛んでしまうのと、マークがアクティブになってしまうのの防止のため。

*result ruby execution*の出力を一度キルしてやる機能もいいかなと思うけど、とにかくできた機能を公開しようと思う。


不満は新しいアイデアをだすのに良いきっかけだなと思った次第で。


もっといいRubyの実行方法があったら教えてくださいm(_ _)m

Emacs Lisp関数のメモ

  • save-excurtion ポイントとマークを復元する。つまり、カーソルの位置に戻るようにする。
  • mark-whole-buffer バッファ全体を選択する。windowsのCtrl+aとだいたい同じ