2011-02-02 74 views
11

我希望在emacs中有一個make-shells命令,它將打開許多emacs-shell緩衝區,每個緩衝區都有自己的工作目錄。我的想法是,對於我正在開發的每個項目,我都有一個從該項目目錄開始的shell,因此我可以輕鬆地在它們之間切換。使用給定的工作目錄在emacs中打開shell

目前我有這樣的代碼:

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

這是很醜陋,不過,有一半的時間(dirs)不拿起正確的路徑,所以標籤完成休息,直到我手動重新運行它。有沒有內置的方法來設置emacs shell的當前工作目錄?或者像CEDET(加上對shell和emacs模式的依賴較少)是一個更好的解決方案嗎?

回答

10

我遇到了與Emacs提供的當前目錄跟蹤相似的問題,所以我寫了一個可以永久解決問題的問題。

看看here

它的功能的簡短版本是修改shell提示符以包含當前目錄的完整路徑(僅在Emacs中運行時),並且Emacs shell緩衝區將使用該路徑。

這意味着你再也不用做M-x dirs

還有包dirtrack(與Emacs一起發售),它做同樣的事情。

我更喜歡我的版本,因爲它從提示中刪除了路徑。我不想在提示中看到整個路徑,因爲我的當前目錄通常很長。

一旦你使用上述兩種解決方案之一,可以簡化您的日常shell-dir是:

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

還有一個答案......我發現有一種方法(在Linux上),使Emacs的身影通過使用/ proc文件系統,正確地取出當前目錄。

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

這樣的話,你只需要啓動的任何目錄殼和Emacs會自動計算出來,並得到了製表完成等權利。

+0

工程就像一個魅力! – dfri 2017-01-16 16:08:29

相關問題