Использование shell по сравнению с eshell всякий раз, когда действие Emacs должно порождать оболочку в новом буфере - PullRequest
1 голос
/ 26 января 2010

Я использую Rinari для разработки Rails в Emacs. Оболочка M-x откроет новый буфер, который соответствует PATH для моей среды (zsh). M-x eshell использует все неправильные PATH, и я не смог заставить его хорошо играть с чем-либо.

Существует функция Rinari, которая запускает экземпляр веб-сервера для приложения Rails, которое я редактирую, однако буфер, который он открывает вместе с экземпляром сервера, является eshell.

Как я могу в конечном итоге получить это, чтобы открыть буфер, используя оболочку (или то, что открылось бы вместо оболочки M-x)?

Ниже приведено определение команды, которую я пытаюсь выполнить.

Есть ли просто параметр, который я могу изменить, или переменная, которая ищет, какую оболочку открыть?

(defun rinari-web-server (&optional edit-cmd-args)
  "Run script/server.  Dump output to a compilation buffer
   allowing jumping between errors and source code.  With optional
   prefix argument allows editing of the server command arguments."
  (interactive "P")
  (let* ((default-directory (rinari-root))
        (script (concat (expand-file-name "server"
                   (file-name-as-directory
                    (expand-file-name "script" (rinari-root))))
         (if rinari-rails-env (concat " -e " rinari-rails-env))))
 (command (if edit-cmd-args
          (read-string "Run Ruby: " (concat script " "))
        script)))
(ruby-compilation-run command)) (rinari-launch))

Ответы [ 2 ]

0 голосов
/ 28 января 2010

Мне удалось создать псевдоним 'emacs' для запуска Emacs.app, и при этом из моей терминальной среды Emacs переносит соответствующий PATH в eshell.

0 голосов
/ 27 января 2010

Если вы не можете найти что-либо для настройки, вы всегда можете попробовать что-то вроде следующего:

(defun fooby ()
  ""
  (interactive)
  (eshell))

(defadvice fooby (around fooby-replace-eshell-with-shell-around act)
  "Substitute `shell` for `eshell` for the duration of this call"
  (flet ((eshell () (shell)))
    ad-do-it))

На время вызова на fooby он будет заменять вызов на shell каждый раз, когда вызывается eshell. Вы хотите сосредоточить внимание на рекомендации как можно более плотно, поэтому, если вы сможете найти функцию, которая на самом деле вызывает eshell, вам следует дать совет. Конечно, если вам не хочется копать, вы всегда можете просто посоветовать rinari-web-server. Если вы никогда не захотите использовать eshell, тогда вы можете использовать fset, чтобы выполнить подстановку глобально:

(fset 'eshell 'shell)

Надеюсь, это поможет!

...