È possibile impostare la variabile ispell-parser
sul valore 'tex
in modo che il flyspell ignori le sequenze (la) tex. Per fare ciò, è possibile impostare manualmente in ogni buffer in questo modo:
M-: (setq 'ispell-parser 'tex)
oppure scrivere un po 'di funzione che lo farà per voi. Inserire il seguente nel vostro file .emacs:
(defun flyspell-ignore-tex()
(interactive)
(set (make-variable-buffer-local 'ispell-parser) 'tex))
si può comunque richiamare manualmente, utilizzando
M-x flyspell-ignore-tex
o si potrebbe aggiungere un gancio che chiama automaticamente quella funzione ogni volta che si modifica un file di un certo tipo Faresti il secondo aggiungendo la funzione appena definita al tuo auto-mode-alist
. Dicono i nomi dei file in genere terminano con ".rst", quindi aggiungere questa riga al vostro file .emacs:
(add-to-list 'auto-mode-alist '("\\.rst$" . flyspell-ignore-tex))
Per quanto riguarda la seconda parte della tua domanda: fare flyspell modalità ignora le regioni più grandi, come, ad esempio, i commenti di reST, non sono facilmente realizzabili. Diventa chiaro quando pensi al modo in cui flyspell funziona: controlla il testo parola per parola. Per questo, flyspell-word
guarda solo una parola alla volta che invia a un processo ispell in esecuzione in background. Il processo ispell esegue la ricerca nel dizionario e restituisce se la parola corrente è corretta o meno. Se flyspell-word
dovessi controllare ogni singola volta se la parola corrente fa parte o meno di un commento o di un'altra regione che non dovrebbe essere controllata, sarebbe piuttosto lenta, perché ciò includerebbe un bel po 'di ricerca nel buffer.
Ora, naturalmente, è possibile avvicinarsi a questo un po 'più in modo intelligente e trovare prima le regioni senza commenti ecc. E quindi eseguire la verifica parola per parola solo in quelle parti che sono al di fuori di quelle regioni - ma sfortunatamente non è così che Flyspell viene implementato.
Se si può fare a meno della parte "vola", tuttavia, la modalità ispell ha un meccanismo per personalizzare quali regioni di un buffer possono essere saltate. Questo viene fatto tramite la variabile ispell-skip-region-alist
. Ma anche se la modalità flyspell funziona in modalità ispell, per le ragioni sopra indicate tale variabile non viene utilizzata dalla modalità flyspell.
Thomas, grazie mille! Ho usato la modalità ispell in passato, ma flyspell mi si adatta meglio al momento. Tuttavia, dopo aver letto il documento 'ispell-skip-region-alist', penso che dovrei programmare una funzione per rilevare la fine del commento. Non ho ancora familiarità con Emacs Lisp. In ogni caso il metodo 'ispell-parser' è ancora utile. Forse potrei controllare come è stato usato e creare il mio ispettore-parser personale quando posso. – manu
Manu, probabilmente non dovrai programmare una funzione lisp per rilevare l'inizio e la fine di un commento. In genere, un'espressione regolare dovrebbe essere sufficiente, una che corrisponde all'inizio e una che corrisponde alla fine. Li metti entrambi tra parentesi e li aggiungi a "ispell-skip-region-alist" (l'ho provato ieri, in realtà non è così difficile) e ci sono buone probabilità che 'rst-mode' contenga già le espressioni regolari stai cercando da qualche parte. – Thomas
In reStructuredText la fine della sezione di codice viene rilevata quando il livello di indentazione viene diminuito. Quindi regexp non sarebbe d'aiuto. Cordiali saluti, Manu. – manu