牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Emacs で複数の shell を開いて複数のコマンドを一気に実行するメモ

(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 で複数一気に実行できる

感想

もっとスマートで簡単な方法は無いのだろうか。どなたか教えてくだされ。