My Python checkers mode.
--- a/.emacs-my Tue Feb 16 14:24:05 2016 +0200
+++ b/.emacs-my Tue Feb 16 21:52:27 2016 +0200
@@ -2855,6 +2855,49 @@
(python-shell-send-region (point) (mark))))
(define-key python-mode-map [?\C-c ?\C-h] 'my-python/send-paragraph))
+(defgroup my/python nil
+ "My Python extentions in Emacs."
+ :group 'python)
+
+(defvar my/python-pylint-command "pylint"
+ "Command to run pylint executable.")
+(defvar my/python-pylint-args "-f parseable"
+ "Arguments to pass to pylint executable.")
+
+(defvar my/python-pep8-command "pep8"
+ "Command to run pep8 executable.")
+(defvar my/python-pep8-args ""
+ "Arguments to pass to pep8 executable.")
+
+(defvar my/python-pyflakes-command "pyflakes"
+ "Command to run pyflakes executable.")
+(defvar my/python-pyflakes-args ""
+ "Arguments to pass to pyflakes executable.")
+
+(defvar my/python-checker-alist
+ '((pylint . (my/python-pylint-command my/python-pylint-args))
+ (pep8 . (my/python-pep8-command my/python-pep8-args))
+ (pyflakes . (my/python-pyflakes-command my/python-pyflakes-args)))
+ "Known Python source code checkers.")
+
+(defcustom my/python-default-checker 'pyflakes
+ "Default Python source code checker. See `my/python-checker-alist' for full alist."
+ :group 'my/python
+ :type (cons 'choice (mapcar (lambda (e) (cons 'const e)) my/python-checker-alist)))
+
+(defvar my/python-check-history nil)
+
+(defun my/python-check (&optional checker)
+ (interactive
+ (list
+ (completing-read "Select cheker: " (mapcar (lambda (e) (car e)) my/python-checker-alist) nil t (symbol-name my/python-default-checker) 'my/python-check-history)))
+ (let ( entry )
+ (unless (setq entry (cdr (assoc (intern-soft checker) my/python-checker-alist)))
+ (error "Unknown checker..."))
+ (compilation-start (format "%s %s %s" (symbol-value (car entry)) (symbol-value (cadr entry)) (shell-quote-argument (buffer-file-name))))))
+
+(my--eval-after-load python
+ (define-key python-mode-map [?\C-c ?\C-v] #'my/python-check))
;; For 3rd party python-mode.el.
(my--eval-after-load python-mode