2008-12-09 66 views
15

根據the Emacs docs,每次打開文件時,Emacs都會將default-directory更改爲包含該文件的目錄。防止默認目錄的自動更改

然後,如果光標在該緩衝區中並且您(例如)啓動SLIME,則它將使用default-directory作爲SLIME的當前工作目錄。如果您嘗試打開一個新文件,它會以default-directory作爲起點打開該文件。

我希望能夠M-x cd或其他cd到一個目錄,然後永遠不會Emacs改變我目前的工作目錄,除了那個目錄之外的任何東西,直到我告訴它,否則。我希望它在所有緩衝區中都是全局的,這樣任何時候我都可以執行涉及當前工作目錄的任何事情時,無論我的光標位於何處,我都知道它是如何設置的。有沒有辦法做到這一點?

回答

11

你可以嘗試使用這樣的事情:

(add-hook 'find-file-hook 
      (lambda() 
      (setq default-directory command-line-default-directory))) 
4

另一方案是默認目錄綁定到必要的目錄,在目錄局部變量,例如在你的父目錄中的一個爲.dir-locals.el文件是這樣的:

((nil . ((default-directory . "~/.emacs.d/")))) 
1

這是我想出來的迄今最好的,可悲的是:

(defun find-file-save-directory() 
    (interactive) 
    (setq saved-default-directory default-directory) 
    (ido-find-file) 
    (setq default-directory saved-default-directory)) 
(global-set-key "\C-x\C-f" 'find-file-save-directory) 

該作品只要default-directory正確設置在我之前C-x C-f。我要接受jurta的回答,指出我有用的方向。