Abilitare la modalità spazio bianco solo in determinati buffer


8

Vorrei che la modalità spazi bianchi fosse attiva per tutti i buffer tranne quelli in modalità org. È facile farlo quando si avvia emacs, ma poiché utilizzo una copia persistente di emacs con la modalità demone di emacs, non posso farlo.

Provai:

(require 'whitespace)
(setq whitespace-line-column 80)
(setq whitespace-style '(face lines-tail))
(global-whitespace-mode t)
(add-hook 'org-mode-hook
      (lambda ()
          (visual-line-mode 1)
          (auto-fill-mode -1)
          (setq whitespace-style nil)))

ma non appena visito un buffer in modalità org tutti i miei futuri buffer non hanno più la modalità spazi bianchi.

Ho pensato di aggiungere un hook per attivare la modalità spazio bianco per altre modalità principali, ma sembra una brutta strada da percorrere poiché non voglio elencare tutte le altre modalità possibili.

So che esiste la modalità spazio bianco insieme alla modalità spazio bianco globale, ma non sono sicuro di come posso usarlo per aiutare qui.

C'è un altro modo per ottenere ciò a cui non sto pensando?


3
È possibile modificare la global-whitespace-modedefinizione aggiungendo (unless (eq major-mode 'org-mode) . . .). Oppure, è possibile abilitarlo in base alla modalità principale anziché a livello globale, ovvero, per ciascuna modalità principale, utilizzare un hook e (whitespace-mode 1). La tua idea può funzionare anche se la usi (setq-local whitespace-style nil), ma tecnicamente la modalità è ancora attiva con solo il coraggio / umph eliminato.
elenco delle leggi


Un buon punto sulla lambda citata. Non sono sicuro di come o perché sia ​​finito in quel modo, ma l'ho rimosso dal mio .emacs Grazie.
jcv,

Risposte:


17
(setq whitespace-global-modes '(not org-mode))

Vedere C-hv whitespace-global-modes RET


Funziona perfettamente. Grazie. Sapevo che doveva esserci qualcosa di semplice che mi mancava.
jcv,

4

Probabilmente è più facile disattivare direttamente la modalità spazi bianchi, usando

 (whitespace-mode -1)

Inoltre, whitespace-stylenon è una variabile buffer-local, quindi viene modificata anche per tutti gli altri buffer. Prova invece

(set (make-local-variable 'whitespace-style) nil)

Inizialmente avevo disattivato direttamente la modalità spazi bianchi invece di agitarmi con la var di stile spazi bianchi. Era solo l'attuale iterazione dei miei tentativi. Proverò ciò che la gente ha suggerito e quindi aggiornerò questo con ciò che ha funzionato per me.
jcv,

Anche questo funziona davvero, ma come hai commentato te stesso, disattivare direttamente la modalità spazi bianchi anziché occuparsi dello stile è una soluzione migliore (cosa che la risposta sopra fa).
jcv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.