2012-03-28 15 views
21

In Emacs 24 scheint die Reihenfolge, in der Farbthemen angewendet werden, von Bedeutung zu sein. Dies ist offensichtlich, wenn Sie M-x Farbschema auswählen. Die Reihenfolge, die Sie icFarbe ändern Themen Emacs 24 - Bestellung ist wichtig

Hat jemand Einblick in dieses Problem?

ich ohne Neustart zwischen den folgenden Farbthemen wechseln können, möchte:

  1. solari-Licht
  2. solari-dark
  3. zenburn
  4. Railscasts

Ich denke, ich brauche das Äquivalent eines CSS-Reset für Emacs. Ein weiterer Tipp, ist von unschätzbarem Wert ist, wenn man böse verwenden, dann müssen Sie diese Zeile oder auch Sie den Cursor schwarz bleibt, die für die dunkelen Themen schrecklich ist:

(setq evil-default-cursor t) 

Dies ist ein Problem in Zusammenhang: Switching between color themes in Emacs (< v.24). Ich benutze Emacs 24.0. Ich poste diese Frage, weil ich nach einem Workaround für pre 24.1 suche, oder vielleicht einen Rat, wenn 24.1 stabil genug ist.

+0

Emacs 24.0 ??. 'M-x display-about-screen' oder' M-x emacs-version' – kindahero

Antwort

17

Es scheint mir, dass Sie sogar auf Emacs 24 immer noch das alte (und nicht beibehaltene) Farbschema-Paket verwenden. Emacs 24 hat eine eingebaute Farb-Theming-Infrastruktur (und Themen wie zenburn und solarized wurden dorthin portiert), die ich vorschlagen würde, stattdessen zu verwenden. Werfen Sie einen Blick auf here für Details auf und Freunde.

Um Ihre spezielle Frage zu Farbthema zu beantworten - Themen definieren in der Regel nicht jedes Gesicht, das ein vorheriges Thema verändert haben könnte und das Ihre Probleme verursacht. Der Wechsel zum Standard-Theme zwischen Themen könnte wahrscheinlich ähnlich einem CSS-Reset sein.

+0

Wie kann ich zwischen den Switches zum Standarddesign wechseln? Vielen Dank! Wenn ich elpa verwende, sollte ich sicherstellen, dass ich kein Farbthema installiere? Übrigens, ich liebe zenburn, aber ich hätte auch gern Railscasts, wenn ich tagsüber etwas mehr Kontrast möchte. Irgendwelche Meinungen über kundengebundene .Xresources, die mit solarized kommen? – justingordon

+3

Ich nehme an, Sie haben ein Thema installiert, das von 'Farbe-Thema' abhing - es gibt viele davon auf Marmelade. In Emacs 24 - 'M-x disable-theme' (obwohl ich mir nicht sicher bin, ob das Problem, das du beschrieben hast, da ist). Ich habe schon lange kein Farbthema mehr verwendet, daher kann ich dir nicht weiterhelfen. Ich passe persönlich '.Xresources' (für Farbthemen) überhaupt nicht an. Warum willst du das tun? –

+0

Ich gebe die Empfehlungen hier für .Xresources: http://ethanschoonover.com/solarized. Ich denke, das könnte ein wenig in Konflikt mit der Verwendung von Emacs Farbthema stehen. – justingordon

3

Wie andere gesagt haben, wechseln Sie zur Emacs 24 Version der Themen. Sobald Sie das verwenden, können Sie ein Thema mit disable-theme rückgängig machen. Geben Sie einfach dasselbe Argument an, das Sie an load-theme übergeben haben, und Sie sollten wieder auf ein unbeschriebenes Blatt zurückkehren. Dann lade einfach das neue Thema.

+0

Nein, Sie können *** * ein benutzerdefiniertes Thema * nicht rückgängig machen. UND Sie können ein * color * -Thema größtenteils rückgängig machen, indem Sie ein vorheriges, nicht-thematisches Aussehen wiederherstellen. Das Deaktivieren eines benutzerdefinierten Designs ist nur relativ zu einem anderen Thema. – Drew

4

Ich schrieb eine Funktion, die das aktuelle Thema deaktiviert, bevor Emacs zu neuen wechselt.

Sie können folgendes Snippet in Ihre init.el einfügen und M-x l0ad-theme verwenden.

https://github.com/maruks/.emacs.d

;; color themes 
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") 

(setq current-t43m3 nil) 

(defun enab-theme (theme) 
    (if current-t43m3 (disable-theme current-t43m3)) 
    (setq current-t43m3 theme) 
    (load-theme theme t)) 

(defun disab-current-theme() 
    (if current-t43m3 (disable-theme current-t43m3)) 
    (setq current-t43m3 nil)) 

(global-set-key (kbd "C-c ltwo") '(lambda() (interactive) (enab-theme 'wombat))) 

(global-set-key (kbd "C-c ltze") '(lambda() (interactive) (enab-theme 'zenburn))) 

(global-set-key (kbd "C-c ltsd") '(lambda() (interactive) (enab-theme 'solarized-dark))) 

(global-set-key (kbd "C-c ltsl") '(lambda() (interactive) (enab-theme 'solarized-light))) 

(global-set-key (kbd "C-c ltne") '(lambda() (interactive) (enab-theme 'tomorrow-night-eighties))) 

(global-set-key (kbd "C-c ltni") '(lambda() (interactive) (enab-theme 'tomorrow-night))) 

(global-set-key (kbd "C-c ltnb") '(lambda() (interactive) (enab-theme 'tomorrow-night-bright))) 

(global-set-key (kbd "C-c ltto") '(lambda() (interactive) (enab-theme 'tomorrow))) 

(global-set-key (kbd "C-c ltta") '(lambda() (interactive) (enab-theme 'tango))) 

(global-set-key (kbd "C-c ltdb") '(lambda() (interactive) (enab-theme 'deeper-blue))) 

(global-set-key (kbd "C-c ltdi") '(lambda() (interactive) (enab-theme 'dichromacy))) 

(global-set-key (kbd "C-c dct") '(lambda() (interactive) (disab-current-theme))) 

(defun l0ad-theme (name) 
    (interactive 
    (list 
    (intern (completing-read "Load custom theme: " 
       (mapcar 'symbol-name (custom-available-themes)))))) 
    (enab-theme name)) 

(setq d3fault-theme (getenv "EMACS_DEFAULT_THEME")) 

(when d3fault-theme 
    (enab-theme (intern d3fault-theme))) 
9

Um automatisch aktuelles Thema zu deaktivieren, bevor die neuen laden, können Sie auch eine Beratung verwenden:

(defadvice load-theme 
    (before theme-dont-propagate activate) 
    (mapcar #'disable-theme custom-enabled-themes)) 
5

den Code einfügen unten in Ihrem .emacs/init.el, Ich habe Ct gebunden, um durch eine festgelegte Liste von Themen in der angegebenen Reihenfolge zu wechseln. Dies ist kompatibel mit Emacs 24.

;;;;; Theme ;;;;; 
;; Cycle through this set of themes 
(setq my-themes '(solarized-light solarized-dark zenburn railscast)) 

(setq my-cur-theme nil) 
(defun cycle-my-theme() 
    "Cycle through a list of themes, my-themes" 
    (interactive) 
    (when my-cur-theme 
    (disable-theme my-cur-theme) 
    (setq my-themes (append my-themes (list my-cur-theme)))) 
    (setq my-cur-theme (pop my-themes)) 
    (load-theme my-cur-theme t)) 

;; Switch to the first theme in the list above 
(cycle-my-theme) 

;; Bind this to C-t 
(global-set-key (kbd "C-t") 'cycle-my-theme) 
+0

Was ist (kb "C-t")? Warum das statt (kbd "C-t")? Entschuldigung, nur ein Tippfehler? – ericx

+0

Es war kein Tippfehler, aber in diesem Fall hätte man genauso gut verwenden können (kbd "C-t"). Der Grund, warum ich ein "kb" -Makro habe, liegt an einem anderen Code, um mehrere Tastatureingaben gleichzeitig auszuführen: '(dolist (pair ') ((" Ck "kill-whole-line) (" Cz "rückgängig machen) ...)) ((global-set-key (kb (auto-pair)) (kadr-pair))). "Wenn ich" kbd "anstelle meines eigenen" kb "-Makros verwende:' (defun kb (k) (read-kbd- Makro k)) ', würde es beschweren über 'kbd' ist ein Makro und keine Funktion. Oder so etwas. Dumme kleine Workaround. Ich habe 'kb' in 'kbd' im obigen Code, also Vielen Dank! –

2

Radeln Sie unter Themen individuelle oder Farbe eine dieser Bibliotheken:

  • Do Re Mi, Befehle doremi-custom-themes+ und doremi-color-themes+. Sie benötigen hierzu doremi-cmd.el.

  • Icicles, Mehrfachbefehle icicle-custom-theme und icicle-color-theme.

Mit dem Icicles Befehle, die Sie auch die Menge der Themen Zyklus unter verengen kann, und man kann es auf verschiedene Arten sortieren (das heißt, den Zyklus Reihenfolge ändern).

Verwandte Themen