Wie kann man {{{{}}} im Flyspell-Modus und im Flyspell-Puffer ausschließen?

1479
towi

Ich bearbeite viele MoinMoinWiki- Seiten in meinem Emacs und liebe das flyspell-mode. Vorformatierte Dateien in {{{...}}}(in mehreren Zeilen) sowie "backtick text backtick" enthalten normalerweise Codefragmente, die für die Rechtschreibprüfung keinen Sinn machen.

Kann ich den Programmiercode konfigurieren ispell/ flyspellnicht einfügen?

Beispiel:

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 
11

1 Antwort auf die Frage

14
Ivan Andrus

Die Variable ispell-skip-region-alistmacht das, was Sie wollen, wenn der Puffer auf Rechtschreibprüfung geprüft wird, nicht jedoch auf Flyspell. Fügen Sie einfach einen Eintrag hinzu wie

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

Leider ist es nicht so einfach, dass Flyspell bestimmte Regionen ignoriert. Sie müssen verwenden, flyspell-generic-check-word-predicatewas eine Funktion ist. Einige Modi definieren dies bereits, so dass Sie diesen Funktionen folgende Ratschläge hinzufügen müssen. Ich gehe zur Vereinfachung davon aus, dass Sie einen Modus verwenden (den ich text-modeunten verwendet habe), in dem er nicht definiert ist. Dann können Sie Folgendes zu Ihren .emacs hinzufügen:

(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) 
perfekt! Meine Moduszeile sagte "(Fundamental Fly)". Das Anhängen an den "Flyspell-Modus" hat nicht funktioniert, aber "Fundamental-Modus" anstelle von "Text-Modus" scheint in Ordnung zu sein. towi vor 13 Jahren 0
Hmm ... wie gehe ich mit beiden um: dem Regex und dem Backtick-Word-Backtick? towi vor 13 Jahren 0
Ich habe Unterstützung für das Backtick-Text-Backtick hinzugefügt. Es wird davon ausgegangen, dass solche Anweisungen nur in einer einzelnen Zeile angezeigt werden. Sie zählt, ob eine gerade oder ungerade Anzahl von Backticks in der Zeile davor steht. Ivan Andrus vor 13 Jahren 0