Wie verwendet man Flyspell in Org-Puffern, ohne dass Flyspell in verschlungenen Codeblöcken ausgelöst wird?

19

Stellen Sie sich einen Organisationspuffer in Emacs vor wie:

* Title

Some text describing the title and the codew (sic) and whatnot.

#+BEGIN_SRC emacs_lisp
(setq backup-by-copying t)
#+END_SRC

Ich möchte, dass flyspell den org-Puffer überprüft (und den Rechtschreibfehler darin abfängt), aber den Inhalt zwischen den Markierungen # + BEGIN_SRC und # + END_SRC ignoriert. Wie geht man damit um?

prjorgensen
quelle
2
Es sieht so aus, als müsste jemand Code mit dem schreiben flyspell-generic-check-word-predicate, falls dieser noch nicht erfunden wurde. Hier ist ein verwandter Thread für Flyspell flyspell-generic-check-word-predicate: superuser.com/a/345461/206164 ; und hier ist ein semi-verwandter Thread für ispell using ispell-skip-region-alist, der sich jedoch nicht auf flyspell bezieht: emacs.stackexchange.com/a/2103/2287
lawlist
Diese Frage ist ein Betrug von diesem emacs.stackexchange.com/questions/450/…
grettke
1
@grettke: Scheint wie ein Betrüger, ist es aber nicht. Das Ändern der Einstellungen für Ispell löst das Problem in Flyspell nicht. Zumindest nicht, als ich es ausprobiert habe.
Brian Z
In v8.3 funktioniert es sofort, wenn Sie es benötigen ox.
Rasmus

Antworten:

12
;; NO spell check for embedded snippets
(defadvice org-mode-flyspell-verify (after org-mode-flyspell-verify-hack activate)
  (let* ((rlt ad-return-value)
         (begin-regexp "^[ \t]*#\\+begin_\\(src\\|html\\|latex\\|example\\|quote\\)")
         (end-regexp "^[ \t]*#\\+end_\\(src\\|html\\|latex\\|example\\|quote\\)")
         (case-fold-search t)
         b e)
    (when ad-return-value
      (save-excursion
        (setq b (re-search-backward begin-regexp nil t))
        (if b (setq e (re-search-forward end-regexp nil t))))
      (if (and b e (< (point) e)) (setq rlt nil)))
    (setq ad-return-value rlt)))

Bitte beachten Sie, dass ispell-skip-region-alist NICHT von flyspell verwendet wird.

Test auf Emacs24.3, 24.4, 24.5, 25.1 mit eingebautem Organisationsmodus

Die meisten Benutzer aktivieren Flyspell standardmäßig. Der obige Code reicht also aus.

Aber ich aktiviere den Flyspell-Modus in der org-Datei nicht. Ich bevorzuge M-x flyspell-bufferimmer wieder manuell . Also brauche ich (flyspell-mode 1) (flyspell-mode -1)im org-mode-hook. Ja, schalten Sie den Flyspell-Modus ein und aus. Der Zweck besteht darin, sicherzustellen, dass das Standardprädikat des Organisationsmodus geladen ist.

chen bin
quelle
Ich schlage vor, dem regulären Ausdruck ein Zitat hinzuzufügen, z. B .: `(begin-regexp" ^ [\ t] * # \\ + begin _ \ (src \\ | html \\ | latex \\ | quote \) "(end- regexp "^ [\ t] * # \\ + end _ \ (src \\ | html \\ | latex \\ | quote \)")
prjorgensen