2011-11-07 15 views
6

Próbuję automatycznie włączyć emacs whitespace-mode tylko w niektórych trybach. Zgodnie z dokumentacją, włączenie global-whitespace-mode i ustawienie zmiennej whitespace-global-modes powinno dokładnie to zrobić. Ale nie mogę zmusić go do poprawnego działania.Jak włączyć tryb białych znaków tylko dla niektórych trybów?

W moim .emacs.el mam:

(require 'whitespace) 
(global-whitespace-mode t) 
(setq whitespace-global-modes '(c-mode c++-mode)) 

ale definicja whitespace-global-modes wydaje się być ignorowane; global-whitespace-mode jest włączony w każdym buforze. Wiem, że mam nazwę zmiennej poprawnie, ponieważ C-h v whitespace-global-modes mówi mi:

whitespace-global-modes's value is (c-mode c++mode) 

Documentation: 
Modes for which global `whitespace-mode' is automagically turned on. 
... 

Więc co robię źle? Czy źle zrozumiałem cel whitespace-global-modes?

Używam emacs 23.2.1.

Odpowiedz

3

Okazuje się, że polecenia w moim .emacs.elbyły przecież (prawie) działające. Co mnie zdezorientowało to, że "WS" pojawia się w modelinie wszystkich buforów, chociaż tylko bufory C i C++ otrzymywały efekt whitespace-mode, zgodnie z życzeniem. Kolejnym problemem było to, że miałem literówkę: c++mode, a nie c++-mode.

+0

Hmm, więc jakie jest znaczenie WS w linii trybu? Jestem zmieszany. WS dla globalnych, ws dla lokalnych ... tego typu rzeczy? –

5

Najwyraźniej znaczenie białych znaków-trybów globalnych bardzo różni się od tego, co ty (i ja) rozumiem.

Jak o próbie

(require 'whitespace) 

(add-hook 'c-mode-hook 
    (function (lambda() 
       (whitespace-mode t)))) 

i powtarzając to samo dla C++ - tryb?

+0

Myślę, że też by działało, ale naprawdę chciałem, aby działały "tryby globalne". Sądzę, że jedną z zalet twojego rozwiązania jest to, że "WS" nie pojawi się w modelinie dla buforów, gdzie nic nie robi. – jchl

+0

Tak, WS versus ws też mnie bardzo zagmatwał. –

+0

Dziękuję bardzo! Rozwiązuje to problem nowo utworzonych plików, a bufor scratch nie jest zgodny z definicją globalną. Dodawanie haków dla każdego trybu (jak opisano w odpowiedzi pana Sevinça) eliminuje potrzebę ręcznego włączania białych znaków dla nowych plików i/lub bufora scratch. Globalne zachowanie było mylące, ponieważ definicja globalna działała dla istniejących plików otwartych przy użyciu aplikacji, ale nie dla nowych plików ani bufora do rysowania. – lawlist

Powiązane problemy