2011-02-02 13 views
11

Desidero avere un comando make-shells in emacs che aprirà un certo numero di buffer della shell emacs, ognuno con la propria directory di lavoro. L'idea è che per ogni progetto su cui sto lavorando, ho una shell che inizia nella directory di quel progetto, così posso passare facilmente da una all'altra.Open shell in emacs con una determinata directory di lavoro

Attualmente ho questo codice:

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

Questo è abbastanza brutto, però, e la metà del tempo (dirs) non raccoglie il percorso corretto, quindi le pause di completamento scheda fino a quando ho ri-eseguirlo manualmente. Esiste un modo integrato per impostare la directory di lavoro corrente della shell di emacs? O sarebbe qualcosa di simile a CEDET (oltre a fare meno affidamento sulla shell rispetto alle modalità emacs) essere una soluzione molto migliore per questo?

risposta

10

Ho riscontrato problemi simili con il rilevamento di directory corrente fornito da Emacs, quindi ne ho scritto uno che risolve il problema una volta e per sempre.

Check it out here.

La versione breve di ciò che fa è che si modifica il prompt della shell per includere un percorso completo alla directory corrente (solo quando si esegue in Emacs) e il buffer di shell di Emacs lo utilizzerà.

Questo significa che non devi mai fare M-x dirs di nuovo.

C'è anche il pacchetto dirtrack (fornito con Emacs) che fa la stessa cosa.

Mi piace la mia versione migliore perché rimuove il percorso dal prompt. Non voglio vedere l'intero percorso nel mio prompt in quanto la mia directory corrente è spesso molto lunga.

Una volta che si utilizza uno dei due precedenti soluzioni, è possibile semplificare il vostro shell-dir routine per essere:

(defun shell-dir (name dir) 
    (interactive "sShell name: \nDDirectory: ") 
    (let ((default-directory dir)) 
    (shell name))) 
1

altro Una risposta ... Ho trovato che c'era un modo (su Linux) per rendere la figura Emacs estrae correttamente la directory corrente, usando il filesystem/proc.

http://www.emacswiki.org/emacs/ShellDirtrackByProcfs

In questo modo, è sufficiente avviare il guscio in qualsiasi directory e Emacs verrà automaticamente capire e ottenere la scheda di completamento ecc destra.

+0

Funziona come un fascino! – dfri

Problemi correlati