Ответ 1
Вы можете попробовать использовать что-то вроде этого:
(add-hook 'find-file-hook
(lambda ()
(setq default-directory command-line-default-directory)))
Как Emacs docs, каждый раз, когда вы открываете файл, Emacs меняет default-directory
на каталог, содержащий этот файл.
Затем, если курсор находится в этом буфере, и вы (например) запустите SLIME, он использует default-directory
в качестве текущего рабочего каталога для SLIME. Если вы попытаетесь открыть новый файл, он откроет файл с default-directory
в качестве отправной точки.
Я хочу иметь возможность M-x cd
или иначе cd
в каталог, а затем никогда не менять Emacs мой текущий рабочий каталог на все, кроме этого каталога, пока я не скажу об этом иначе. Я хочу, чтобы это было глобальным во всех буферах, так что в любое время, когда я делаю что-то с текущим рабочим каталогом, я знаю, что он настроил независимо от того, где мой курсор в данный момент. Есть ли способ сделать это?
Вы можете попробовать использовать что-то вроде этого:
(add-hook 'find-file-hook
(lambda ()
(setq default-directory command-line-default-directory)))
Другой вариант - связать каталог по умолчанию с необходимым каталогом в локальных переменных каталога, например. в файле .dir-locals.el в одном из ваших родительских каталогов:
((nil . ((default-directory . "~/.emacs.d/"))))
Это лучшее, что я придумал до сих пор, к сожалению:
(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
. Я собираюсь принять ответ Юрты, чтобы указать мне в полезном направлении.