(emacs24.3)
Rails とか Django での開発環境で動作させるのに様々なサーバーやら何やらを複数起動したい場合があって、一つずつ実行するのが面倒なので何とかしてみた。
シェルのバッファ名を指定してコマンドを実行する elisp
かつ一度関数を実行したら再び同じコマンドは実行せず、そのバッファをただ開く。
バッファ名を指定するのは helm とかで探しやすいように。
ちなみに Emacs の M-x shell を使う。
(defun my-run-shell-command-when-buffer-is-not-open (current-buffer command) (let ((buffer-name current-buffer)) (cond ((null (get-buffer buffer-name)) (shell buffer-name) (process-send-string buffer-name command)) (t (shell buffer-name) ))))
去年かそれ以前に書き捨て的に書いたと思われるので細かい事は覚えてないけど、関数名が変とか後で考える事にする。(誰か修正してくだされ...)
バッファ名と実行コマンドををセットする
こんな感じ
(defun python-managepy-runserver () (interactive) (my-run-shell-command-when-buffer-is-not-open "*python-managepy-runserver*" ;; バッファ名 "python manage.py runserver --settings=settings.foobar\n" ;; これコマンド "\n"が無いと実行できななかった気がする ) )
ひとつだけ実行したい場合もあるので
M-x python-managepy-runserver とかで実行できる
こういう関数を必要なコマンド分つくる
複数一気に実行する
(defun run-foobar () (interactive) (foo-server) (bar-server) (buz-server) (python-managepy-shell-plus) (python-managepy-runserver) )
M-x run-foobar で複数一気に実行できる
感想
もっとスマートで簡単な方法は無いのだろうか。どなたか教えてくだされ。