0

EmacsWiki は、他のソースの中でも特に、Flymake に Python チェックを追加するためのこの種のレシピを提供しています。

(defun flymake-pylint-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    (list "epylint" (list local-file)))

local-fileを相対ファイル名として使用することが有用または望ましいのはなぜですか? 私は代わりに使用します:

(defun flymake-flake8-init ()
  (unless (file-remote-p default-directory)
    (let ((temp-file (flymake-init-create-temp-buffer-copy
                      'flymake-create-temp-with-folder-structure)))
      `("flake8" ("--max-complexity=10" ,temp-file)))))

絶対でうまくいくようtemp-fileです。

4

1 に答える 1

1

このコードスニペットも混乱しています。しかし、少なくともバグがあり、作業ディレクトリがシンボリックリンクのパス名で表されている場合にエラーが発生します。このような場合、elisp 関数buffer-file-nameは、実際のパス名ではなく、現在のバッファーのシンボリック リンク パス名を返すだけです。temp-fileただし、は flymake 一時ファイルの実際のパス名です。Sotemp-fileと の値(file-name-directory buffer-file-name)は実際には矛盾しています。この不一致により、相対パス名が正しくなくなります。

于 2014-03-14T15:19:52.290 に答える