Ich versuche in Emacs24 folgendes Verhalten zu erreichen:
Ich verwende gerne ein anderes Thema (Solarized-Dark vs. Solarized-Light), je nachdem, ob ich mit einem Terminal-Frame eine Verbindung zum laufenden Server herstelle
% emacsclient -t
oder mit einem GTK-Rahmen
% emacsclient -c
Dies scheint in älteren Emacs funktioniert zu haben, aber mit den aktuellen Emacs konnte ich keinen Weg finden. Ich alreday geprüft SO (zB /programming//q/18904529/152439 und Antworten) und die Mailinglisten (zB https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html und https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).
Mein aktuelles Setup sieht so aus:
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(if (display-graphic-p frame)
(load-theme 'solarized-light t)
(load-theme 'solarized-dark t)
)
)
)
(load-theme 'solarized-light t)
)
Das Problem dabei ist, dass, wenn ich einen Grafikrahmen geöffnet habe und dann einen Terminalrahmen mit öffne emacsclient -t
, das Thema solarized-dark sowohl auf den neuen Terminalrahmen (der korrekt ist) als auch auf den bereits geöffneten Grafikrahmen (der belassen werden sollte) angewendet wird unberührt, idealerweise). Das Gleiche passiert, wenn ein Terminal-Frame bereits geöffnet ist und ich einen neuen Grafik-Frame mit öffne emacsclient -c
.
EDIT: Falls dies mit dem aktuellen Emacs24 nicht möglich ist, gibt es Pläne, dies wieder zu ermöglichen?
color-theme.el
welchem IIRC rahmenabhängige Farbeinstellungen vorgenommen wurden. Abgesehen von der Allgegenwart bietet die Verwendung der integrierten Theming-Funktionen keinen großen Vorteil.color-theme
pufferlokale Themen sowohl für das Emacs 24-Themensystem als auch für das Emacs 24-Themensystem. Meine Version des solarisierten Themas unterstützt auch beide Systeme, wenn Sie sich für diesen Weg entscheiden.Antworten:
Sie können dies nicht mit verschiedenen Themen tun. Die Lösung besteht darin, ein Thema zu erstellen, das je nach Terminal unterschiedliche Gesichtsdefinitionen aufweist. Wenn Sie sich ein Beispiel wie dieses ansehen
font-lock-comment-face
, werden Sie sehen, wie es funktioniert. Anstatt anzugeben((class color) (min-colors 88) (background dark))
könnten Sie auch angeben(type tty)
oder(type graphic)
usw. Das Handbuch enthält weitere Informationen .Sie könnten eine Funktion schreiben, die zwei Themen verwendet und ein zusammengeführtes Thema erzeugt, wobei Gesichter eines Themas zugewiesen werden
(type tty)
und Gesichter des anderen Themas zugewiesen werden,(type graphic)
wenn beide ursprünglichen Themen verwendet werdent
.quelle
color-theme-buffer-local bietet Unterstützung für pufferlokale Themen sowohl für Color-Theme- als auch für Emacs 24-Themensysteme. Meine Version des solarisierten Themas unterstützt auch beide Systeme, wenn Sie sich für diesen Weg entscheiden.
quelle
Sie können im Anpassungseditor Bedingungen für Gesichtsanpassungen wie "Terminalmodus" oder "Minimalfarben" definieren:
Klicken Sie beim Anpassen eines Gesichts auf die Schaltfläche [Status] und wählen Sie "Alle Anzeigespezifikationen anzeigen". Dann können Sie die Bedingungen für eine weitere Spezialisierung des Gesichts festlegen.
Hier ist eine minimale Variante, um die Hintergrundfarbe auf Schwarz zu setzen, wenn der Rahmen eine Tty ist:
quelle