防止默认目录的自动更改

时间:2008-12-09 22:31:16

标签: emacs

根据the Emacs docs,每次打开文件时,Emacs都会将default-directory更改为包含该文件的目录。

然后,如果光标位于该缓冲区中并且您(例如)启动SLIME,则它使用default-directory作为SLIME的当前工作目录。如果您尝试打开新文件,则会以default-directory为起点打开文件。

我希望能够M-x cd或以其他方式cd访问目录,然后永远不会让我的当前工作目录更改为除该目录之外的任何内容,直到我告诉它。我希望它在所有缓冲区中都是全局的,所以无论何时我正在做涉及当前工作目录的事情,我都知道它的设置是什么,无论我的光标在哪里。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:12)

您可以尝试使用以下内容:

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

答案 1 :(得分:4)

另一种变体是将 default-directory 绑定到目录本地变量中的必要目录,例如:在您的一个父目录中的.dir-locals.el文件中,如下所示:

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

答案 2 :(得分: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的回答,指出我有用的方向。