私はまったく Lisp 派ではありませんが、私の主要なスクリプト環境は emacs 上にあり、ファイルに .py 拡張子がない場合に flymake/pyflakes を実行するには、助けが必要です。私の職場の一部のスクリプトには .py 拡張子が付いていないためです。
これは、拡張子が .py のファイルを読み取ったりコーディングしたりするときに、pylint、pep8、pychecker などでうまく機能します。
;; flymake for python
(add-to-list 'load-path "~/.emacs.d/plugins/flymake")
(when (load "flymake" t)
(defun flymake-pylint-init (&optional trigger-type)
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-with-folder-structure))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name)))
(options (when trigger-type (list "--trigger-type" trigger-type))))
(list "~/.emacs.d/plugins/flymake/pyflymake.py" (append options (list local-file)))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pylint-init)))
(add-hook 'find-file-hook 'flymake-find-file-hook)
;; flymake help on minibuffer
(defun my-flymake-show-help ()
(when (get-char-property (point) 'flymake-overlay)
(let ((help (get-char-property (point) 'help-echo)))
(if help (message "%s" help)))))
(add-hook 'post-command-hook 'my-flymake-show-help)
.py 拡張子がない場合に、この機能する init スニペットを取得しようとしました。上記のコードを python-mode-hook でラップし、\.py\ セクションを \.*\ のようなものに変更しました。
ただし、これは Python ファイルだけでなく flymake-pylint-init 関数を呼び出しています。emacs 内で開いたものは何でも呼び出します。
ところで、拡張子のないファイルでは mx flymake-mode を使用できません。そのマイナー モードを開いていません。
私はそれを機能させるためのアイデアを得たいと思っています。ありがとう!