¿Cómo se usa flyspell en los búferes de organización sin activar flyspell en bloques de código enredados?

19

Imagine un búfer de organización en Emacs como:

* Title

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

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

Quiero flyspell para verificar el búfer de organización (y detectar el error de ortografía en él) pero ignorar el contenido entre las marcas # + BEGIN_SRC y # + END_SRC. ¿Cómo se hace eso?

prjorgensen
fuente
2
Parece que alguien necesitará escribir un código usando flyspell-generic-check-word-predicate, si eso no se ha inventado. Aquí hay un hilo relacionado para flyspell usando el flyspell-generic-check-word-predicate: superuser.com/a/345461/206164 ; y, aquí hay un hilo semi-relacionado para usar ispell ispell-skip-region-alist, pero no relacionado con flyspell: emacs.stackexchange.com/a/2103/2287
leyes
¿Puede ayudar emacs.stackexchange.com/a/2103/2609 ?
Nombre
Esta pregunta es una trampa de esa emacs.stackexchange.com/questions/450/…
grettke
1
@grettke: Parece un tonto, pero no lo es. Cambiar la configuración de Ispell en realidad no resuelve el problema en Flyspell. Al menos no cuando lo intenté.
Brian Z
Funciona fuera de la caja en v8.3 cuando lo requiera ox.
rasmus

Respuestas:

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

Tenga en cuenta que ispell-skip-region-alist NO es utilizado por flyspell.

Prueba en Emacs24.3, 24.4, 24.5, 25.1 con el modo org incorporado

La mayoría de los usuarios activan el flyspell por defecto. Entonces, el código anterior es suficiente.

Pero no habilito flyspell-mode en el archivo org. Prefiero manualmente M-x flyspell-bufferuna y otra vez. Entonces necesito (flyspell-mode 1) (flyspell-mode -1)en org-mode-hook. Sí, enciende y luego apaga el modo flyspell. El propósito es asegurarse de que el predicado predeterminado del modo org esté cargado.

Chen Bin
fuente
Sugiero agregar una cita a la expresión regular, como: `(begin-regexp" ^ [\ t] * # \\ + begin _ \ (src \\ | html \\ | latex \\ | quote \) ") (end- regexp "^ [\ t] * # \\ + end _ \ (src \\ | html \\ | latex \\ | quote \)") `
prjorgensen