Предотвращение автоматического изменения каталога по умолчанию

Как Emacs docs, каждый раз, когда вы открываете файл, Emacs меняет default-directory на каталог, содержащий этот файл.

Затем, если курсор находится в этом буфере, и вы (например) запустите SLIME, он использует default-directory в качестве текущего рабочего каталога для SLIME. Если вы попытаетесь открыть новый файл, он откроет файл с default-directory в качестве отправной точки.

Я хочу иметь возможность M-x cd или иначе cd в каталог, а затем никогда не менять Emacs мой текущий рабочий каталог на все, кроме этого каталога, пока я не скажу об этом иначе. Я хочу, чтобы это было глобальным во всех буферах, так что в любое время, когда я делаю что-то с текущим рабочим каталогом, я знаю, что он настроил независимо от того, где мой курсор в данный момент. Есть ли способ сделать это?

Ответы

Ответ 1

Вы можете попробовать использовать что-то вроде этого:

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

Ответ 2

Другой вариант - связать каталог по умолчанию с необходимым каталогом в локальных переменных каталога, например. в файле .dir-locals.el в одном из ваших родительских каталогов:

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

Ответ 3

Это лучшее, что я придумал до сих пор, к сожалению:

(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. Я собираюсь принять ответ Юрты, чтобы указать мне в полезном направлении.