Aktivieren Sie den Whitespace-Modus nur in bestimmten Puffern

8

Ich möchte, dass der Whitespace-Modus für alle Puffer außer für den Organisationsmodus aktiviert ist. Es ist einfach, dies zu tun, wenn Emacs gestartet wird, aber da ich eine dauerhafte Kopie von Emacs im Emacs-Daemon-Modus verwende, kann ich das nicht einfach so machen.

Ich habe es versucht:

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

Sobald ich jedoch einen Puffer im Organisationsmodus besuche, haben alle meine zukünftigen Puffer keinen Leerzeichenmodus mehr.

Ich dachte daran, einen Hook hinzuzufügen, um den Whitespace-Modus für andere Hauptmodi zu aktivieren, aber das scheint ein schlechter Weg zu sein, da ich nicht alle anderen möglichen Modi aufzählen möchte.

Ich weiß, dass es neben dem globalen Whitespace-Modus auch einen Whitespace-Modus gibt, aber ich bin mir nicht sicher, wie ich damit auch hier helfen kann.

Gibt es einen anderen Weg, um dies zu erreichen, an den ich nicht denke?

jcv
quelle
3
Sie können die global-whitespace-modeDefinition durch Hinzufügen ändern (unless (eq major-mode 'org-mode) . . .). Oder Sie können es auf der Basis eines Hauptmodus anstatt global aktivieren - dh verwenden Sie für jeden Hauptmodus einen Hook und (whitespace-mode 1). Ihre Idee mag auch funktionieren, wenn Sie sie verwenden (setq-local whitespace-style nil), aber technisch gesehen ist der Modus immer noch aktiv, wenn nur die Eingeweide / Umph herausgenommen werden.
Lawlist
1
Unabhängig: Sie sollten Ihr lambdas
Malabarba
Guter Punkt über das zitierte Lambda. Ich bin mir nicht sicher, wie oder warum ich so gelandet bin, aber ich habe es aus meinen .emacs entfernt. Danke.
JCV

Antworten:

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

Sehen C-hv whitespace-global-modes RET

Phils
quelle
Das funktioniert perfekt. Vielen Dank. Ich wusste, dass es etwas Einfaches geben musste, das mir fehlte.
JCV
4

Es ist wahrscheinlich einfacher, den Whitespace-Modus direkt mit zu deaktivieren

 (whitespace-mode -1)

Da whitespace-stylees sich nicht um eine pufferlokale Variable handelt, wird sie auch für alle anderen Puffer geändert. Versuchen Sie es stattdessen

(set (make-local-variable 'whitespace-style) nil)
Kirill
quelle
Eigentlich hatte ich den Whitespace-Modus zunächst direkt ausgeschaltet, anstatt mich mit dem Whitespace-Stil zu beschäftigen. Das war nur die aktuelle Wiederholung meiner Versuche. Ich werde versuchen, was die Leute vorgeschlagen haben, und dies dann mit dem aktualisieren, was für mich funktioniert hat.
JCV
Dies funktioniert tatsächlich auch, aber wie Sie selbst kommentiert haben, ist es eine bessere Lösung, den Leerzeichenmodus direkt auszuschalten, anstatt sich mit dem Stil zu befassen (was die obige Antwort tut).
JCV