Comment exclure {{{……}}} en mode flyspell et en tampon flyspell?

11

J'édite beaucoup de pages MoinMoinWiki dans mes emacs et j'adore le flyspell-mode. Les éléments préformatés dans {{{...}}}(sur plusieurs lignes) ainsi que le "backtick text backtick" contiennent généralement des extraits de code de programmation qui n'ont aucun sens à vérifier l'orthographe.

Puis-je configurer ispell/ flyspellne pas inclure le code de programmation?

Exemple:

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
towi
la source

Réponses:

15

La variable ispell-skip-region-alistfait ce que vous voulez lors de la vérification orthographique du tampon, mais pas pour flyspell. Ajoutez simplement une entrée comme

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

Malheureusement, il n'est pas aussi facile de faire voler des sorts pour ignorer certaines régions. Vous devez utiliser flyspell-generic-check-word-predicatece qui est une fonction. Plusieurs modes le définissent déjà, vous devrez donc ajouter les conseils suivants à ces fonctions. Je suppose par souci de simplicité que vous utilisez un mode (que j'ai utilisé text-modeci-dessous) qui ne l'a pas défini. Ensuite, vous pouvez ajouter ce qui suit à votre .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)
Ivan Andrus
la source
parfait! Ma ligne de mode a dit (Fundamental Fly). L'accrochage flyspell-moden'a pas fonctionné, mais fundamental-modeau lieu de text-modesemble bien.
2011
Hmm ... comment gérer les deux: le ^{{{... ^}}}regex et celui de Backtick-word-Backtick?
2011 à 8h06
J'ai ajouté la prise en charge du backtick-text-backtick. Il suppose que de telles instructions n'apparaissent que sur une seule ligne - il compte s'il y a un nombre pair ou impair de retours en arrière sur la ligne qui la précède.
Ivan Andrus