Como se usa o flyspell em buffers organizacionais sem o acionamento do flyspell em blocos de código emaranhados?

19

Imagine um buffer organizacional no 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

Quero que o flyspell verifique o buffer organizacional (e pegue o erro de ortografia nele), mas ignore o conteúdo entre as marcas # + BEGIN_SRC e # + END_SRC. Como alguém faz isso?

prjorgensen
fonte
2
Parece que alguém precisará escrever algum código usando o flyspell-generic-check-word-predicate, se isso ainda não tiver sido inventado. Aqui está um tópico relacionado ao flyspell usando flyspell-generic-check-word-predicate: superuser.com/a/345461/206164 ; e, aqui está um fio semi-relacionada para ispell usando ispell-skip-region-alist, mas não relacionadas com a flyspell: emacs.stackexchange.com/a/2103/2287
lawlist
Esta questão é um joguete de que um emacs.stackexchange.com/questions/450/...
grettke
1
@ Grettke: Parece um idiota, mas não é. Alterar as configurações do Ispell, na verdade, não resolve o problema no Flyspell. Pelo menos não quando eu tentei.
Brian Z
Funciona imediatamente na v8.3 quando você precisar ox.
rasmus

Respostas:

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

Observe que ispell-skip-region-alist NÃO é usado pelo flyspell.

Teste no Emacs24.3, 24.4, 24.5, 25.1 com modo org interno

A maioria dos usuários ativa o flyspell por padrão. Portanto, o código acima é suficiente.

Mas não habilito o modo flyspell no arquivo organizacional. Eu prefiro manualmente de M-x flyspell-buffernovo e de novo. Então, eu preciso (flyspell-mode 1) (flyspell-mode -1)no modo org-hook. Sim, ative e desative o modo flyspell. O objetivo é garantir que o predicado padrão do modo organizacional seja carregado.

Chen Bin
fonte
Sugiro adicionar aspas ao regexp, como: `(begin-regexp" ^ [\ t] * # \\ + begin _ \ (src \\ | html \\ | latex \\ | quote \) ") (end- regexp "^ [\ t] * # \\ + end _ \ (src \\ | html \\ | látex \\ | quote \)") `
prjorgensen