Comment utilise-t-on flyspell dans les tampons d'organisation sans que flyspell ne se déclenche sur des blocs de code enchevêtrés?

19

Imaginez un tampon d'organisation dans Emacs comme:

* Title

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

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

Je veux que flyspell vérifie le tampon d'organisation (et y détecte l'erreur d'orthographe) mais ignore le contenu entre les marques # + BEGIN_SRC et # + END_SRC. Comment procéder?

prjorgensen
la source
2
Il semble que quelqu'un devra écrire du code en utilisant le flyspell-generic-check-word-predicate, si cela n'a pas déjà été inventé. Voici un sujet connexe pour flyspell utilisant flyspell-generic-check-word-predicate: superuser.com/a/345461/206164 ; et, voici un thread semi-connexe pour ispell utilisant ispell-skip-region-alist, mais sans rapport avec flyspell: emacs.stackexchange.com/a/2103/2287
lawlist
Cette question est une dupe de celle-là emacs.stackexchange.com/questions/450/…
grettke
1
@grettke: On dirait une dupe, mais ce n'est pas le cas. La modification des paramètres d'Ispell ne résout pas réellement le problème dans Flyspell. Du moins pas quand je l'ai essayé.
Brian Z
Cela fonctionne dès la sortie de la boîte en v8.3 lorsque vous en avez besoin ox.
rasmus

Réponses:

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)))

Veuillez noter que ispell-skip-region-alist n'est PAS utilisé par flyspell.

Test sur Emacs24.3, 24.4, 24.5, 25.1 avec le mode org intégré

La plupart des utilisateurs activent flyspell par défaut. Donc, le code ci-dessus est suffisant.

Mais je n'active pas le mode flyspell dans le fichier org. Je préfère M-x flyspell-bufferencore et encore manuellement . J'ai donc besoin (flyspell-mode 1) (flyspell-mode -1)de org-mode-hook. Oui, activez puis désactivez le mode flyspell. Le but est de s'assurer que le prédicat par défaut du mode org est chargé.

chen bin
la source
Je suggère d'ajouter une citation à l'expression rationnelle, comme: `(begin-regexp" ^ [\ t] * # \\ + begin _ \ (src \\ | html \\ | latex \\ | quote \) ") (end- regexp "^ [\ t] * # \\ + end _ \ (src \\ | html \\ | latex \\ | quote \)") `
prjorgensen