Зміна поточного каталогу режиму компіляції автоматично?


16

Наразі моя команда компіляції така:

cd ~/somedir && ./somescript.sh

Це заважає emacs знаходити файл, у якому відбувається помилка (та відкривати його).

Звичайно, я можу запускатися M-x cdвручну, але чи є спосіб сказати буфері програмно змінити поточний каталог?


1
Це те, що я також намагався зробити. В ідеалі, у базовому каталозі може бути щось, що ви можете ввести .dir-locals.el (хаки, які я бачив, щоб встановити там каталог за замовчуванням, викликають небажані побічні ефекти, і встановлення його лише для режиму компіляції здається, не працює).
— Julian Squires

Відповіді:


7

Нарешті, я відмовився, покладаючись на поточний каталог, оскільки це було занадто настирливим та іншими речами, такими як ido, де закінчення впливало ...

Натомість я використовую доданий до моєї збірки каталог compilation-search-path

(add-to-list 'compilation-search-path "/path/to/build")

Знайдено в цьому запитанні: як відрегулювати шлях, який Emacs 'compile-goto-помилка отримує з буфера компіляції?

Питання також пояснює, що відповідник каталогу може автоматично змінювати каталог, якщо випускаються певні рядки:

Entering directory `...'
... 
Leaving directory `...'

Це також налаштовується, мабуть.


Це виглядає як надійне рішення. Якщо це працює для вас, сміливо приймайте це.
— Малабарба

Зауважте, що це може не спрацювати, якщо вам потрібно, щоб система збирання знаходила деякі файли в /path/to/build.
— Андре

5

Ви можете просто створити подвійний буфер каталогу, куди потрібно викликати команду компіляції, щоб служити якорем. Коли ви хочете компілювати, перейдіть на буфер «Здрібнений» та запустіть команду компіляції. compileзапустить свою команду в цій директорії вкладки "Dired". Перевагою цього є те, що вам не доведеться переглядати M-x cdкаталоги та пересувати їх, коли ви хочете компілювати.

Якщо ви використовуєте projectile, вона має команду з ім'ям, projectile-compileяка автоматично запускає команду компіляції в корені проекту, розпізнаваному projectile.


4

Ця альтернативна команда повинна виконати трюк:

(defun compile-in-dir (dir command)
  (interactive "DCompile in directory: \nsCommand: ")
  (let ((default-directory dir))
    (compile command)))

Крім того, після запуску компіляції, використовуючи звичайну compileкоманду, ви можете зрівнятися (setq default-directory "~/somedir")в *compilation*буфері. Це повинно змусити навігацію помилок працювати, але це може перешкодити recompileдрузям робити все правильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.