2010-01-26 12 views
1

J'utilise Rinari for Rails dans Emacs. M-x shell ouvrira un nouveau tampon qui est correctement PATH pour mon environnement (zsh). M-x eshell utilise tous les PATH incorrects et je n'ai pas réussi à le faire fonctionner correctement.Utilisation de shell par rapport à eshell chaque fois qu'une action Emacs doit générer un shell dans un nouveau tampon

Il existe une fonction de Rinari qui déclenche une instance d'un serveur Web pour l'application Rails que je suis en train d'éditer, mais le tampon qu'il ouvre avec l'instance du serveur est eshell.

Comment puis-je finalement obtenir ceci pour ouvrir un tampon en utilisant shell (ou ce qui ouvrirait avec M-x shell) à la place?

Voici le defun de la commande que j'essaie d'exécuter.

Y a-t-il simplement un paramètre que je peux changer ou une variable qui cherche quel shell à ouvrir?

(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)) 

Répondre

0

J'ai été capable d'alias 'emacs' pour lancer Emacs.app et, ce faisant, depuis mon environnement de terminal, Emacs transfère le chemin approprié dans eshell.

0

Si vous ne trouvez rien à configurer, vous pouvez toujours essayer quelque chose comme ce qui suit:

(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)) 

Pendant toute la durée de l'appel à fooby il remplacera un appel à tout moment shelleshell est appelée. Vous voulez concentrer le conseil aussi étroitement que possible, donc si vous pouvez trouver la fonction qui appelle réellement eshell, ce serait à conseiller. Bien sûr, si vous n'avez pas envie de creuser, vous pouvez toujours conseiller rinari-web-server. Si vous jamais, jamais à utiliser eshell, vous pouvez utiliser fset faire la substitution au niveau mondial:

(fset 'eshell 'shell) 

Hope that helps!