2008-12-09 3 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 правильно установлен до I C-x C-f. Я собираюсь принять ответ Джурты за то, что указал мне в полезном направлении.