Emacs: «Найти файл» без изменения рабочего каталога - PullRequest
4 голосов
/ 16 июня 2011

Мои проекты на c / c ++ обычно имеют довольно простые структуры каталогов, которые разделяют src, include, bin и т. Д. У меня также есть основной make-файл в верхнем каталоге.При такой работе в Emacs мне всегда нужно выдавать Mx cd uppermost-dir , чтобы ярлыки компиляции работали как положено.

Есть ли способ сохранить текущий каталогтакой же, как тот, с которого я запускаю Emacs?То есть, могу ли я помешать Emacs изменить свой рабочий каталог при открытии файла?

В качестве альтернативы, есть ли что-то важное, чего мне не хватает в типичном рабочем процессе с иерархией каталогов, подобной этой, исключительно в Emacs?

Ответы [ 5 ]

7 голосов
/ 16 июня 2011

Один из способов сделать это:

Создать файл в корневом каталоге вашего проекта. .dir-locals.el

Это будет прочитано всякий раз, когда вы открываете файл в каталоге или егоподкаталоги.

Чтобы выполнить резервное копирование в корневую папку и запустить make в качестве команды компиляции, просто поместите ее в файл .dir-locals.el.

((nil . ((compile-command . "cd ~/mycode/c/; make"))))

nil isрежим для установки локальных переменных (nil означает любой), поэтому, чтобы сделать это только для режима C ++, вы можете сделать это вместо этого ...

((c++-mode . ((compile-command . "cd ~/mycode/c/; make"))))

Очевидно, вы можете создать список с большим количеством опций, скажем,запуск муравья для java-файлов и т. д.

emacs ручной ввод для локальных каталогов

5 голосов
/ 16 июня 2011

Вызвать make с аргументом --directory, чтобы заставить его перейти в этот каталог, прежде чем делать что-либо:

make --directory /path/to/your/project

4 голосов
/ 16 июня 2011

Перейдите в каталог проекта (где находится Makefile ) и вызовите compile:

(defun my-compile ()
  (interactive)
  (when-let (default-directory (locate-dominating-file default-directory "Makefile"))
    (call-interactively 'compile)))
1 голос
/ 16 июня 2011

Раньше я M-x compile <RET> cd /path/to/project && make -j8, но сейчас предпочитаю метод Бена.

1 голос
/ 16 июня 2011

Текущий каталог, связанный с буфером, который связан с файлом, обычно является каталогом, содержащим файл. Вы можете изменить его, но это не обязательно для того, что вы хотите сделать.

Установите переменную compilation-directory через локальную переменную файла (обычно относительно текущего файла, например, "../..") или через .dir-locals.el.

...