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

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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.