【发布时间】:2011-04-26 17:06:26
【问题描述】:
我目前正在使用以下代码在 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 目录中的一个目录,但其他符号链接的类似方式不会发生这种情况。
我该如何解决这个问题?
更新
我已经进行了一些调试,现在我发现它没有将正确的路径作为参数传递。它需要在路径中再插入一个父目录才能使其工作,这让我觉得它因为符号链接而变得混乱。
这是一个示例 shell 会话来说明我的意思。我正在从正确的相对目录执行此操作:
$ 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 是我不想要的疯狂的相对路径。为什么那个 sn-p 的作者首先使用local-file?
谢谢, 瑞恩
【问题讨论】:
标签: python emacs flymake pyflakes