2013-04-11 7 views
5

Próbuję ustawić motyw - jeden tylko dla terminala, a drugi tylko dla GUI. Czytałem ten wątek: Run certain Emacs init commands only in GUI modeUstawienia tylko dla GUI/Terminal emacs

co doprowadziło mnie tutaj: https://superuser.com/questions/165335/how-can-i-show-the-emacs-menu-in-gui-emacs-frames-but-not-in-tty-frames-when-usi

i starał się stworzyć funkcję, aby odpowiadał moim potrzebom.

(defun set-frame-theme (frame) 
    (let ((want-theme (memq (framep frame) '(x w32 ns)))) 
    (set-frame-parameter frame '(load-theme '(if want-theme monokai solarized-dark) t)))) 
(add-hook 'after-make-frame-functions 'set-frame-theme) 

To nie działa. Próbuję go załadować monokai tylko, jeśli gui, w przeciwnym razie załadować solarized-dark. To działa dla interfejsu GUI, ale powoduje awarię terminala.

Sugestie?

Odpowiedz

11

Funkcja emacs lisp, (display-graphic-p) Zwróci wartość true, jeśli emacs działa w GUI.

W .emacs, dodać następujące przełączać między GUI i tematów terminali

(if (display-graphic-p) 
    (load-GUI-theme) 
    (load-Terminal-theme)) 

Dla łatwiejszej konfiguracji, mam proste funkcja nazywana jest in-końcowy

(defun is-in-terminal() 
    (not (display-graphic-p))) 

ci może użyć tej funkcji, aby napisać łatwiejszą do odczytania funkcję, aby uzyskać więcej informacji. e podejście do terminali Tylko konfiguracji Mam makro, które działa podobnie jak progn ale tylko ocenia ciało kiedy Emacs jest uruchomiony bez GUI

(defmacro when-term (&rest body) 
    "Works just like `progn' but will only evaluate expressions in VAR when Emacs is running in a terminal else just nil." 
    `(when (is-in-terminal) ,@body)) 

Przykład użycia:

(when-term 
    (load-my-term-theme) 
    (set-some-keybindings) 
    (foo-bar)) 

Cały ten blok będzie całkowicie ignorowane, jeśli działa w GUI, ale uruchomi się w Terminalu.

Wszystko to kod został wzięty z pliku w moim config, jeśli zainteresowany można to sprawdzić tutaj:

https://github.com/jordonbiondo/Emacs/blob/master/Jorbi/jorbi-util.el

+1

Lepiej, niż się spodziewałem. Dzięki! – CrimsonKing

+0

Próbowałem już, a emacs zgłasza błąd, mówiąc "Definicja funkcji symbolu jest nieważna: display-graphics-p". Co powinienem zrobić?Używam Emacsa 24. – CrimsonKing

+0

Oops Typo! Powinien to być (display-graphic-p) nie (display-graphicS-p) <- zanotować liczbę mnogą. Zaktualizowałem wpis. –

0

Wydaje się, że problem związany z samym tematem - nic więcej i nic mniej. no cóż.

0

ja też miałem problem z emacs upaść podczas pracy w trybie terminalowym przy wyborze kolor-motyw. Powiedziałbym, że to nie jest problem z motywem kolorów, ale z samym emacsem. Aktualizacja do najnowszej wersji HEAD zadziałała dla mnie od czasu tego pisania.

0

Jak wspomniano na https://www.emacswiki.org/emacs/CustomizingFaces

„Jeśli chcesz różne schematy kolorów dla różnych wyświetlaczy, można dostosować to za dobrze. W buforze Dostosuj, kliknij przycisk [State] i wybrać«Pokaż wszystkie specyfikacje Ekran». Teraz możesz używać różnych specyfikacji dla różnych wyświetlaczy. "

Powiązane problemy