2011-02-02 14 views
11

Chcę mieć polecenie emacs w wersji make-shells, które otworzy wiele buforów emacs-shell, każdy z własnym katalogiem roboczym. Chodzi o to, że dla każdego projektu, nad którym pracuję, mam powłokę, która zaczyna się w katalogu tego projektu, więc mogę łatwo przełączać się między nimi.Otwórz powłokę w emacs z podanym katalogiem roboczym

Obecnie mam ten kod:

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

Jest to dość brzydki, choć i połowę czasu (dirs) nie podnieść właściwą ścieżkę, więc przerwy zakończenia zakładka aż ponownie uruchomić go ręcznie. Czy istnieje wbudowany sposób ustawiania bieżącego katalogu roboczego powłoki emacs? Czy coś takiego jak CEDET (plus mniejsze uzależnienie od trybu powłoki vs emacsa) byłoby o wiele lepszym rozwiązaniem?

Odpowiedz

10

Doświadczyłem podobnych problemów z bieżącym śledzeniem katalogów dostarczanych przez Emacs, więc napisałem taki, który rozwiązuje problem raz na zawsze.

Sprawdź to here.

Krótka wersja tego, co robi, polega na tym, że zmodyfikujesz monit powłoki, aby zawierał pełną ścieżkę do bieżącego katalogu (tylko podczas działania w Emacs), a bufor powłoki Emacsa to użyje.

Oznacza to, że nigdy więcej nie musisz robić M-x dirs.

Istnieje również pakiet dirtrack (dostarczany z Emacsem), który robi to samo.

Moja wersja jest lepsza, ponieważ usuwa ścieżkę z monitu. Nie chcę widzieć całej ścieżki w moim monicie, ponieważ mój bieżący katalog jest często bardzo długi.

Raz użyć jednego z dwóch powyższych rozwiązań, można uprościć procedury shell-dir być:

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

Jeszcze jedna odpowiedź ... Znalazłem istnieje sposób (w systemie Linux), aby Emacs figurę prawidłowo katalog bieżący, używając systemu plików/proc.

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

W ten sposób, po prostu trzeba uruchomić powłokę w jakimkolwiek katalogu i Emacs automatycznie ustalić to i uzyskać kartę uzupełniania itp rację.

+0

Działa jak urok! – dfri

Powiązane problemy