В настоящее время я использую следующий код для соединения flymake и Pyflakes в emacs:
(defun flymake-create-temp-in-system-tempdir (filename prefix)
(make-temp-file (or prefix "flymake")))
, а затем передаю эту функцию flymake-init-create-temp-buffer-copy
.(Взято из http://hustoknow.blogspot.com/2010/09/emacs-and-pyflakes-using-tmp-directory.html).
Этот код работал до вчерашнего дня. Когда я посещаю определенные файлы Python, я получаю следующую ошибку:
switched OFF Flymake mode for buffer admin.py due to fatal status
CFGERR, warning Configuration error has occured while running
(pyflakes ../../../../../../../tmp/flymake28459SVv)
Почему мухи пропускают то, что кажется неправильнымимя файла в pyflakes? Я ожидаю, что он передаст что-то вроде "/ tmp / efe234234", и я не изменил ни одного из параметров каталога tmp.
Я не помню, чтобы emacs обновлялся для Ubuntu недавно и может 'Я не думаю о чем-либо, что могло бы привести к путанице (файлы .emacs версионированы).
Единственная проблема, о которой я могу думать, это то, что это сильно вложенный каталог, связанный с каталогом в моем ~ / Dropboxкаталог, но это не происходит с другими символическими ссылками подобным образом.
Как я могу решить эту проблему?
ОБНОВЛЕНИЕ
Я имеюЯ выполнил некоторую отладку, и теперь я вижу, что он не передает правильный путь в качестве аргумента. Ему нужен еще один родительский каталог, вставленный в путь, чтобы заставить его работать, что заставляет меня думать, что он испорчен из-засимволические ссылки.
Вот пример сеанса оболочки, чтобы показать, что я имею в виду.Я делаю это из правильного относительного каталога:
$ pyflakes ../../../../../tmp/flymake13382xHi
../../../../../tmp/flymake13382xHi: No such file or directory
Это команда, которую flymake пытается выполнить.Если я его поменяю:
$ pyflakes ../../../../../../tmp/flymake13382xHi
Я не получаю вывод (как и ожидалось).Обратите внимание на дополнительные «..» на пути.
Как я могу заставить муху проходить абсолютный путь вместо этих безумных относительных путей?
ОБНОВЛЕНИЕ 2
Я получил все, чтобы работать.В основном есть эта функция:
(defun flymake-pyflakes-init ()
; Make sure it's not a remote buffer or flymake would not work
(when (not (subsetp (list (current-buffer)) (tramp-list-remote-buffers)))
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-in-system-tempdir))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pyflakes" (list temp-file)))))
В последней части мне пришлось изменить аргумент на list
с local-file
на temp-file
, потому что local-file
был сумасшедшим относительным путем, которого я не делалхочу.Почему автор этого фрагмента использовал local-file
в первую очередь?
Спасибо, Райан