Frage

Ich verwende flymake mit Pyflakes meines Python-Code zu überprüfen und flyspell meine Saiten und Kommentare zu überprüfen. Ich möchte eine Funktion haben, die auf den nächsten Fehler gehen, oder wird bei einem Fehler, wenn zur Zeit Informationen über den Fehler anzuzeigen. Wie würde ich diese Funktion schreiben?

War es hilfreich?

Lösung

Dieser Code enthält Funktionen, die Sie zum nächsten Fehler springt, und wenn es ein flymake Fehler ist, zeigt Informationen für sie, wenn es ein flyspell Fehler ist, es es für Sie korrigiert. Wenn Sie nicht über die Auto-Korrektur wollen, un-Kommentar die Zeile, die 'my-flyspell-message ruft und die Linie vor, dass entfernen, die 'flyspell-auto-correct-word nennen -. Und Sie werden einfach eine Nachricht über das Wort falsch geschrieben wird, erhalten

Die erste Zeile bindet dieser an den Keybinding C-C-N . Weitere Informationen über die Tasten Bindung finden Sie die Info-Seite Key Bindungen .

(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)))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top