私は現在、次のコードを使用して、emacsでflymakeとPyflakesを接続しています。
(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)
flymakeが間違ったファイル名のように見えるものをpyflakesに渡すのはなぜですか?「/tmp/ efe234234」のようなものを渡すことを期待していますが、tmpディレクトリの設定は変更していません。
最近Ubuntu用に更新されたemacsを思い出せず、これが混乱する原因となった可能性のあるものは何も考えられません(.emacsファイルはバージョン管理されています)。
私が考えることができる唯一の問題は、これが私の〜/ Dropboxディレクトリ内のディレクトリにシンボリックリンクされた密にネストされたディレクトリであるということですが、これは同様の方法でシンボリックリンクされた他のディレクトリには発生しません。
この問題を解決するにはどうすればよいですか?
アップデート
デバッグを行ったところ、引数として正しいパスが渡されていないことがわかりました。パスを機能させるには、もう1つの親ディレクトリをパスに挿入する必要があります。これにより、シンボリックリンクが原因で混乱しているように見えます。
これが私が何を意味するかを示すためのシェルセッションの例です。私は正しい相対ディレクトリからこれを行っています:
$ pyflakes ../../../../../tmp/flymake13382xHi
../../../../../tmp/flymake13382xHi: No such file or directory
これは、flymakeが実行しようとしているコマンドです。変更した場合:
$ pyflakes ../../../../../../tmp/flymake13382xHi
(期待どおりに)出力が得られません。パス内の余分な「..」に注意してください。
これらのクレイジーな相対パスの代わりに絶対パスをflymakeに渡すにはどうすればよいですか?
更新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
ありがとう、ライアン