Як виключити {{{...}}} в режимі flyspell та flyspell-буфера?


11

Я редагую багато сторінок MoinMoinWiki в своїх електронних повідомленнях і люблю це flyspell-mode. Заздалегідь відформатовані матеріали {{{...}}}(у декількох рядках), а також "backtick text backtick" зазвичай містять фрагменти коду програмування, які не мають сенсу перевіряти орфографію.

Чи можу я налаштувати ispell/ flyspellне включити код програмування?

Приклад:

Bla bla lorem ipsum die Standardcontainer wie `vector` eine
''Methode'' haben, die ein einzelnes Argument nimmt, also
`vector<T>::swap(vector<T)>&)`. Bla bla und diese `swap`-Methoden sind
von dieser Sorte. Warum das so ist, sehen wir gleich. Bla bla
was '''kanonisch''' ist bla bla Template-Funktion<<tlitref(stdswap)>>

{{{#!highlight c++ title="Man könnte 'std::swap@LT@@GT@' spezialisieren"
namespace std {
  template<> // wir können durchaus im namespace std spezialisieren
  void swap<Thing>(Thing&, Thing&) {
    // ...hier swappen...
  }
}
}}}

Nun, das würde sicherlich in diesem Fall helfen, doch es bleibt ein
größeres Problem: Eine teilweise Spezialisierung lorem ipsum bla bla

Відповіді:


15

Змінна ispell-skip-region-alistробить те, що ви хочете, перевіряючи правопис буфера, але не для flyspell. Просто додайте запис, як

(add-to-list 'ispell-skip-region-alist
             '("^{{{" . "^}}}"))

На жаль, проігнорувати певні регіони не так просто, щоб проігнорувати певні регіони. Ви повинні використовувати, flyspell-generic-check-word-predicateяка є функцією. Кілька режимів вже визначають це, тому вам доведеться додати наступне як пораду щодо цих функцій. Я вважаю, що для простоти ви користуєтесь режимом (я використовував text-modeнижче), у якому його немає. Тоді ви можете додати до своїх .emacs:

(defun flyspell-ignore-verbatim ()
  "Function used for `flyspell-generic-check-word-predicate' to ignore {{{ }}} blocks."
  (save-excursion
    (widen)
    (let ((p (point))
          (count 0))
      (not (or (and (re-search-backward "^{{{" nil t)
                    (> p (point))
                    ;; If there is no closing }}} then assume we're still in it
                    (or (not (re-search-forward "^}}}" nil t))
                        (< p (point))))
               (eq 1 (progn (while (re-search-backward "`" (line-beginning-position) t)
                              (setq count (1+ count)))
                            (- count (* 2 (/ count 2))))))))))
(put 'text-mode 'flyspell-mode-predicate 'flyspell-ignore-verbatim)

ідеально! Моя лінія режиму сказала (Fundamental Fly). Підключити це flyspell-modeне вийшло, але fundamental-modeзамість цього text-modeздається прекрасним.
букси

Хм ... як я обробляти як: в ^{{{... ^}}}регулярне вираженні і лапки-слово-лапки один?
букси

Я додав підтримку backtick-text-backtick. Він передбачає, що такі висловлювання відображаються лише в одному рядку - він підраховує, чи є непарна чи непарна кількість посилань на цьому рядку.
Іван Андрус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.