2009-12-09 8 views
2

J'utilise flymake avec pyflakes pour vérifier mon code python et flyspell pour vérifier mes chaînes et commentaires. Je veux avoir une fonction qui ira à l'erreur suivante, ou affichera des informations sur l'erreur si actuellement à une erreur. Comment est-ce que j'écrirais cette fonction?En utilisant une clé pour les deux flymake Et flyspell

Répondre

4

Ce code offre une fonctionnalité qui vous saute à la prochaine erreur, et si elle est une erreur de flymake, affiche des informations pour elle, si elle est une erreur de Flyspell, ce pour vous corrige. Si vous ne voulez pas la correction automatique, décochez la ligne qui appelle 'my-flyspell-message et supprimez la ligne avant celle qui appelle 'flyspell-auto-correct-word - et vous obtiendrez juste un message sur le mot mal orthographié.

La première ligne lie cela à la liaison de touches C-c n. Pour plus d'informations sur les clés de liaison, consultez la page d'informations Key Bindings.

(global-set-key (kbd "C-c n") 'my-display-error-or-next-error) 
(defun my-display-error-or-next-error() 
    "display information for current error, or go to next one" 
    (interactive) 
    (when (or (not (my-at-flymake-error)) 
      (not (my-at-flyspell-error))) 
    ;; jump to error if not at one 
    (my-goto-next-error)) 

    (cond ((my-at-flymake-error) 
     ;; if at flymake error, display menu 
     (flymake-display-err-menu-for-current-line)) 
     ((my-at-flyspell-error) 
     ;; if at flyspell error, fix it 
     (call-interactively 'flyspell-auto-correct-word) 
     ;; or, uncomment the next line to just get a message 
     ;; (my-flyspell-message) 
     ))) 

(defun my-at-flyspell-error() 
    "return non-nill if at flyspell error" 
    (some 'flyspell-overlay-p (overlays-at (point)))) 

(defun my-at-flymake-error() 
    "return non-nil if at flymake error" 
    (let* ((line-no    (flymake-current-line-no)) 
     (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no)))) 
    line-err-info-list)) 

(defun my-goto-next-error() 
    "jump to next flyspell or flymake error" 
    (interactive) 
    (let* ((p (point)) 
     (spell-next-error-function '(lambda() 
           (forward-word) (forward-char) 
           (flyspell-goto-next-error))) 
     (spell-pos (save-excursion 
         (funcall spell-next-error-function) 
         (point))) 
     (make-pos (save-excursion 
        (flymake-goto-next-error) 
        (point)))) 
    (cond ((or (and (< p make-pos) (< p spell-pos)) 
       (and (> p make-pos) (> p spell-pos))) 
      (funcall (if (< make-pos spell-pos) 
         'flymake-goto-next-error 
         spell-next-error-function))) 
      ((< p make-pos) 
      (flymake-goto-next-error)) 

      ((< p spell-pos) 
      (funcall spell-next-error-function))))) 

(defun my-flyspell-message() 
    (interactive) 
    (let ((word (thing-at-point 'word))) 
    (set-text-properties 0 (length word) nil word) 
    (message "Missspelled word: %s" word))) 
+0

Merci, c'est exactement ce que je voulais. – Nikwin