Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get whitespace-mode enabled only for certain modes

I'm trying to get emacs whitespace-mode enabled automatically only in certain modes. According to the documentation, enabling global-whitespace-mode and setting the whitespace-global-modes variable should do exactly that. But I can't get it to work correctly.

In my .emacs.el I have:

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

but the definition of whitespace-global-modes seems to be ignored; global-whitespace-mode is enabled in every buffer. I know that I've got the variable name correctly, because C-h v whitespace-global-modes tells me:

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

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

So what am I doing wrong? Have I misunderstood the purpose of whitespace-global-modes?

I'm running emacs 23.2.1.

like image 930
jchl Avatar asked Nov 07 '11 12:11

jchl


2 Answers

Apparently the meaning of whitespace-global-modes is very different from what you (and I) understand.

How about trying

(require 'whitespace)

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

and repeating the same thing for c++-mode?

like image 182
Emre Sevinç Avatar answered Oct 16 '22 14:10

Emre Sevinç


It turns out that the commands in my .emacs.el were (almost) working after all. What confused me was that "WS" appears in the modeline of all buffers, even though only C and C++ buffers were getting the effect of whitespace-mode, as desired.

The other problem was that I had a typo: c++mode rather than c++-mode.

like image 20
jchl Avatar answered Oct 16 '22 12:10

jchl