2013-04-11 13 views
5

Sto provando a impostare un tema, uno solo per terminale e uno solo per gui. Ho letto questa discussione: Run certain Emacs init commands only in GUI modeImpostazioni solo per GUI/Terminal emacs

che mi ha portato qui: https://superuser.com/questions/165335/how-can-i-show-the-emacs-menu-in-gui-emacs-frames-but-not-in-tty-frames-when-usi

e ha cercato di creare una funzione per soddisfare il mio bisogno.

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

Non funziona. Sto provando a caricare il monokai solo se gui, altrimenti caricare solarized-dark. Funziona per l'interfaccia della GUI, ma fa sì che il terminale apparentemente si blocchi.

Suggerimenti?

risposta

11

La funzione lisp emacs, (display-graphic-p) Restituisce true se emacs è in esecuzione in una GUI.

Nei tuoi .emacs, aggiungere il seguente per passare dal GUI e temi terminali

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

Per la configurazione più semplice, ho una semplice funzione chiamata è-in-terminale

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

voi potrebbe usare questo per scrivere una funzione più facile da leggere

(if (is-in-terminal) 
    (load-Terminal-theme) 
    (load-GUI-theme)) 

Per un più completo e approccio al Terminal Solo configurazione Ho una macro che funziona proprio come progn ma valuta solo il corpo quando Emacs è in esecuzione senza una 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)) 

Esempio di utilizzo:

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

Tutto questo blocco sarà totalmente ignorato se in esecuzione in una GUI, ma verrà eseguito se in Terminale.

Tutto questo codice è stato preso da un file nella mia configurazione, se interessati potete verificarlo qui:

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

+1

Meglio di quanto mi aspettassi. Grazie! – CrimsonKing

+0

L'ho provato, ed emacs genera un errore, dicendo "La definizione della funzione del simbolo è nulla: display-graphics-p". Cosa dovrei fare?Sto usando Emacs 24. – CrimsonKing

+0

Oops Typo! Dovrebbe essere (display-graphic-p) not (display-graphicS-p) <- annotare il plurale. Ho aggiornato il post. –

0

Sembra un problema con il tema stesso: niente di più e niente di meno. bene

0

anch'io ho avuto il problema di emacs crash durante l'esecuzione in modalità terminale, mentre la selezione di un colore-tema. Direi che questo non è un problema con il tema del colore ma con emacs stesso. L'aggiornamento alla versione più recente di HEAD ha funzionato per me al momento della stesura di questo documento.

0

Come accennato https://www.emacswiki.org/emacs/CustomizingFaces

"Se si vuole diverse combinazioni di colori per i diversi schermi, è possibile personalizzare anche questo. Nel buffer Personalizza, fare clic sul pulsante [Stato] e scegli‘Mostra tutte le specifiche del display’. Ora puoi usare diverse specifiche per diversi display. "

Problemi correlati