2008-12-09 28 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的回答,指出我有用的方向。