Як можна використовувати flyspell в org буферах, не запускаючи flyspell на заблокованих блоках коду?


19

Уявіть буфер org у Emacs, наприклад:

* Title

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

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

Я хочу, щоб flyspell перевіряв буфер org (і в ньому вдавалася орфографічна помилка), але ігнорував вміст між знаками # + BEGIN_SRC та # + END_SRC. Як можна з цим піти?


2
Схоже, комусь потрібно буде записати якийсь код за допомогою flyspell-generic-check-word-predicate, якщо це ще не винайдено. Ось пов'язана нитка для flyspell за допомогою flyspell-generic-check-word-predicate: superuser.com/a/345461/206164 ; і ось ispell-skip-region-alistнапівспоріднена нитка для використання ispell , але не стосується flyspell: emacs.stackexchange.com/a/2103/2287
законник

може emacs.stackexchange.com/a/2103/2609 допомогти?
Ім'я

Це запитання є справжньою частиною того emacs.stackexchange.com/questions/450/…
grettke

1
@grettke: Схоже, дуп, але це не так. Зміна налаштувань для Ispell насправді не вирішує проблему в Flyspell. Принаймні не тоді, коли я спробував це.
Брайан Z

Він працює з коробки в v8.3, коли вам потрібно ox.
rasmus

Відповіді:


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

Будь ласка, зверніть увагу, що ISLET-skip-region-alist НЕ використовується flyspell.

Тест на Emacs24.3, 24.4, 24.5, 25.1 із вбудованим org-режимом

Більшість користувачів включають flyspell за замовчуванням. Тож вище коду вистачає.

Але я не вмикаю режиму flyspell у файлі org. Я віддаю перевагу вручну M-x flyspell-bufferзнову і знову. Тому мені потрібно (flyspell-mode 1) (flyspell-mode -1)в org-mode-гачок. Так, увімкніть, а потім вимкніть режим прольоту. Мета полягає в тому, щоб переконатися, що завантажений предикат за замовчуванням в режимі org.


Я пропоную додати цитату до регулярного виразу, наприклад: `(begin-regexp" ^ [\ t] * # \\ + begin _ \ (src \\ | html \\ | latex \\ | цитата \) ") (end- regexp "^ [\ t] * # \\ + кінець _ \ (src \\ | html \\ | латекс \\ | цитата \)") `
prjorgensen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.