перевод пути в Emacs для поиска пути к локальному исходному файлу из удаленных (компиляции ssh) имен файлов ошибок

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

Я использую GNU Emacs 23.1.1 и пробовал cygwin-mount и w32-symlinks.el (с (customize-option 'w32-symlinks-handle-shortcuts)); Я не могу получить open-file/dired/completions ИЛИ следующую ошибку режима компиляции, чтобы следовать ярлыкам Windows или символическим ссылкам cygwin.

Я удаленно компилирую (через ssh), и предупреждения/ошибки дают имена файлов, где префикс абсолютных путей (например, /nfs/topaz) на удаленном хосте необходимо заменить другим путем (фактически z:/), на что я надеялся делать с символическими ссылками.

/ действительно переходит (в emacs расширяется до табуляции) c:/cygwin, а ~ — в z:/ (мой $HOME).

Я надеюсь либо на исправление разрешения символической ссылки (завершение табуляции или открытие ярлыка Windows дает мне файл .lnk, а не на то, на что он указывает), либо на возможность предоставить список перезаписи для префиксов путей. Соединения не подходят, потому что путь замены, который я хочу, находится на другом диске (это также монтирование Samba).


person Jonathan Graehl    schedule 11.12.2009    source источник


Ответы (3)


Это также полезно в других сложных средах сборки: я использую OpenWRT, и процесс сборки копирует (или извлекает) исходный код в отдельный каталог сборки, в котором происходит компиляция. Таким образом, наивное следование именам файлов в буфере компиляции emacs приводит к редактированию временных копий, а не оригиналов. Опасный.

person Eric Anderson    schedule 16.01.2010
comment
Возвращаясь к этому, я обнаружил, что злоупотребление переменной directory-abbrev-alist см. руководство, лучше решает мои проблемы. По сути, вы можете сказать emacs, что имя каталога компиляции является псевдонимом (аббревиатурой) для исходного каталога, поэтому, когда он встречает путь в каталоге компиляции, он перезаписывает его так, чтобы он был в исходном каталоге. Учтите также магические имена файлов и крючок file-name-handler-alist. - person Eric Anderson; 29.04.2010

Вот частичное решение:

(custom-set-variables '(compilation-search-path (quote (nil "z:/dir1" "~/dir2"))

и т. д. Конечно, мне нужно добавить десятки путей, но это огромное улучшение (теперь следующая ошибка действительно работает!)

person Jonathan Graehl    schedule 12.12.2009

Перечитав несколько раз, я все еще не совсем уверен, какова ваша ситуация. Вы компилируете удаленно и редактируете локально? Если это так, вам следует попробовать выполнить обе задачи на одном компьютере или попробовать tramp режим в emacs. Я просто не вижу простого способа перевести удаленный путь в локальный.

person zdav    schedule 11.12.2009
comment
Удаленный хост имеет в качестве некоторого локального канонического префикса абсолютного пути то, что локально является монтированием samba, а именно z:/. Как я уже сказал, это действительно одни и те же файлы. Я пользовался трампом давным-давно. - person Jonathan Graehl; 11.12.2009
comment
Я использую emacs на своем компьютере с Windows, потому что мой cygwin xserver не поддерживает субпиксельные шрифты (cleartype). - person Jonathan Graehl; 11.12.2009