Как определить функцию Emacs Lisp для порождения буфера оболочки с определенной командой, выполняемой в оболочке? - PullRequest
4 голосов
/ 06 ноября 2010

Я занимаюсь разработкой Rails и обнаружил, что мне нужно создать shell , переименовать буфер (например, webrick), затем запустить команду (rails s) и затем выполнить все заново, если Мне нужна консоль rails или rails dbconsole, rspec, spork и т. Д. Каждый раз, когда я запускаю emacs.

Я надеюсь на что-то вроде этого:

(defun spawn-shell ()
   "Invoke shell test"
    (with-temp-buffer
      (shell (current-buffer))
      (process-send-string nil "echo 'test1'")
      (process-send-string nil "echo 'test2'")))

Я не хочу, чтобы оболочка уходила при выходе, потому что вывод в буфер оболочки важен, и иногда мне нужно убить его и перезапустить, но я не хочу потерять эту историю.
По сути, я хочу взять ручной процесс и сделать его доступным.

Любая помощь очень ценится

Tom

Ответы [ 2 ]

16 голосов
/ 07 ноября 2010

Возможно, эта версия spawn-shell будет делать то, что вы хотите:

(defun spawn-shell (name)
  "Invoke shell test"
  (interactive "MName of shell buffer to create: ")
  (pop-to-buffer (get-buffer-create (generate-new-buffer-name name)))
  (shell (current-buffer))
  (process-send-string nil "echo 'test1'\n")
  (process-send-string nil "echo 'test2'\n"))

Она запрашивает имя для использования при интерактивном запуске ( Mx spawn-shell ).Он создает новый буфер на основе имени ввода, используя generate-new-buffer-name, и вы пропускаете символы новой строки в конце строк, которые вы отправляли процессу.

3 голосов
/ 07 ноября 2010

Если ваша единственная проблема в том, что буфер оболочки исчезает после выполнения команд, почему бы не использовать get-buffer-create вместо with-temp-buffer?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...