Ative apenas o modo de espaço em branco em determinados buffers

8

Gostaria de ativar o modo de espaço em branco para todos os buffers, exceto os do modo organizacional. É fácil fazer isso quando o emacs é iniciado, mas como eu uso uma cópia persistente do emacs com o modo damac do emacs, não posso fazê-lo dessa maneira.

Eu tentei:

(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)))

mas assim que visito um buffer de modo organizacional, todos os meus futuros buffers não têm mais o modo de espaço em branco.

Pensei em adicionar um gancho para ativar o modo de espaço em branco para outros modos principais, mas isso parece um caminho ruim, já que não quero enumerar todos os outros modos possíveis.

Eu sei que existe o modo de espaço em branco junto com o modo de espaço em branco global, mas não tenho certeza de como posso usar isso para ajudar aqui também.

Existe alguma outra maneira de conseguir isso em que não estou pensando?

jcv
fonte
3
Você pode modificar a global-whitespace-modedefinição adicionando (unless (eq major-mode 'org-mode) . . .). Ou você pode habilitá-lo por modo principal em vez de globalmente - ou seja, para cada modo principal, use um gancho e (whitespace-mode 1). Sua idéia também pode funcionar se você usar (setq-local whitespace-style nil), mas tecnicamente o modo ainda está ativo com apenas as tripas / umph removidas.
lawlist
Bom ponto sobre o lambda citado. Não sei como ou por que acabei dessa maneira, mas a removi do meu .emacs Obrigado.
JCV

Respostas:

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

Vejo C-hv whitespace-global-modes RET

phils
fonte
Isso funciona perfeito. Obrigado. Eu sabia que tinha que haver algo simples que estava faltando.
JCV
4

Provavelmente é mais fácil desativar o modo de espaço em branco diretamente, usando

 (whitespace-mode -1)

Além disso, whitespace-stylenão é uma variável local de buffer, portanto é modificada para todos os outros buffers também. Experimente

(set (make-local-variable 'whitespace-style) nil)
Kirill
fonte
Na verdade, eu havia inicialmente desabilitado o modo de espaço em branco diretamente, em vez de mexer com a var no estilo de espaço em branco. Essa foi apenas a iteração atual das minhas tentativas. Vou tentar o que as pessoas sugeriram e depois atualizar isso com o que funcionou para mim.
Jcv
Na verdade, isso também funciona, mas, como você se comentou, desativar o modo de espaço em branco diretamente, em vez de lidar com o estilo, é uma solução melhor (como a resposta acima).
JCV