uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

GroovyServの小技シリーズ3 -- groovy-execute-buffer-file

編集中のバッファ中のGroovyコードをGroovyServで実行するコマンド。

(defvar groovy-command "groovyclient %f"
  "groovy or compatible command. %f means buffer-file")
(setq groovy-command-line nil)
(defun groovy-execute-argument()
  (if (null groovy-command-line)
      (setq groovy-command-line groovy-command))
  (setq groovy-command-line
        (read-string "Groovy command: " groovy-command-line))
  (list groovy-command-line))
(defun groovy-execute-buffer-file (arg)
  "Execute the groovy code of this buffer."
  (interactive (groovy-execute-argument))
  (save-some-buffers)
  (shell-command
   (if (string-match "%f" groovy-command-line)
       (replace-match (buffer-file-name) t t groovy-command-line nil)
     groovy-command-line)))

(add-hook 'groovy-mode-hook
          (lambda () (define-key groovy-mode-map "\C-cm" 'groovy-execute-buffer-file)))

(setq groovy-command "/tool/groovyserv-0.4/bin/groovyclient %f")

groovy-mode-hookにC-c mで引っ掛けてます。groovy-modeは各自でご用意を。

ちなみにこれは別にGroovyServに限らない(groovyコマンドを結びつけておけばいい)し、groovyに限る訳ですらもありません。

こういう機能ってひょっとしてすでにEmacsにある気もするが、ruby-modeとshell-modeのキーバインディングには見つからなかったので作った。後悔はしていないが公開はする。