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


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.