2010-11-06 7 views
4

Je fais du développement Rails et trouve que j'ai besoin de générer un shell , renommer le buffer (par exemple webrick), puis lancer la commande (rails s) et refaire le tout si je veux une console rails ou rails dbconsole, rspec, spork, etc. chaque fois que je démarre emacs.Comment définir une fonction Emacs Lisp pour générer un buffer de shell avec une commande particulière exécutée dans le shell?

J'espère que quelque chose comme ceci:

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

Je ne veux pas la coquille pour disparaître quand il sort parce que la sortie dans la mémoire tampon shell est important et quelques fois je dois le tuer et redémarrez-le mais je ne veux pas perdre cette histoire.
Essentiellement, je veux prendre le processus manuel et le rendre invocable.

Toute aide est très appréciée

Tom

Répondre

16

Peut-être que cette version de spawn-shell fera ce que vous voulez:

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

Il demande un nom à utiliser lorsque vous l'exécutez de manière interactive (M-x spawn-shell). Il crée un nouveau tampon basé sur le nom d'entrée en utilisant generate-new-buffer-name, et il vous manquait les retours à la ligne à la fin des chaînes que vous envoyiez au processus.

+0

Trey, c'est génial. Merci beaucoup! – traday

+0

LOL, puisque c'est ma première question, je n'ai pas assez de points de rep pour voter votre réponse. – traday

3

Si votre problème est seulement que le tampon shell disparaît après que les commandes ont été exécutées, pourquoi ne pas utiliser get-buffer-create au lieu de with-temp-buffer?

+0

Merci Gareth. – traday

Questions connexes