Открытие оболочки в emacs с заданным рабочим каталогом

Я хочу иметь команду make-shells в emacs, которая откроет ряд emacs-shell буферы, каждый со своим собственным рабочим каталогом. Идея состоит в том, что для каждого проекта, над которым я работаю, у меня есть оболочка, которая запускается в каталоге этого проекта, поэтому я могу легко переключаться между ними.

В настоящее время у меня есть этот код:

(defun shell-dir (name dir)
  (interactive "sShell name: \nDDirectory: ")
  (shell name)
  (switch-to-buffer name)
  (comint-send-string (current-buffer) (concat "cd " dir "\r"))
  (sleep-for 0 10)
  (dirs))

(defun make-shells ()
  (interactive)
  (shell-dir "project1" "~/proj/project1")
  (shell-dir "project2" "~/proj/project2")
  (shell-dir "project3" "~/proj/project3")
  (delete-window))

Это довольно некрасиво, и в половине случаев (dirs) не выбирает правильный путь, поэтому завершение табуляции прерывается до тех пор, пока я не перезапущу это вручную. Есть ли встроенный способ установить текущий рабочий каталог оболочки emacs? Или что-то вроде CEDET (плюс меньшая зависимость от режимов оболочки по сравнению с режимами emacs) было бы гораздо лучшим решением?

11
задан Jeff Ames 2 February 2011 в 21:28
поделиться