2010-03-04 15 views
5

Sto provando a configurare il mio file .emacs in modo che funzioni in un ambiente Windows, Linux e Mac - in particolare, ho bisogno di scegliere il font corretto e una determinata directory per l'organizzazione modalità.Come scegliere il tipo di sistema in Emacs

Ho provato la seguente che carica il carattere corretto, ma non carica il percorso specificato per org-mode:

 
;; On Windows 
(if (eq system-type 'windows-nt) 
    (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1") 
    (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path)) 
) 

;; On Linux 
(if (eq system-type 'gnu/linux) 
    (set-default-font "Inconsolata-11") 
    (setq load-path (cons "~/elisp/org-current/lisp" load-path)) 
) 

Ho provato il seguente, che sulla mia macchina Windows restituisce l'errore Font Inconsolata-11 is not defined, e sulla mia macchina Linux restituisce l'errore Font -outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1 is not defined. Per entrambi, il percorso org specificato non è caricato:

 
;; On Windows 
(if (eq system-type 'windows-nt) 
    (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path)) 
    (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1") 
) 

;; On Linux 
(if (eq system-type 'gnu/linux) 
    (setq load-path (cons "~/elisp/org-current/lisp" load-path)) 
    (set-default-font "Inconsolata-11") 
) 

Ho valutato la variabile system-type in entrambi gli ambienti, ed entrambi valutare correttamente.

Qualcuno può vedere cosa c'è che non va - inoltre, non sono molto esperto in emacs-lisp, puoi vedere quali sono le ipotesi sbagliate che sto facendo?

Grazie, Zachary

+2

Stai assumendo che 'if' è' when', che non è. Inoltre, perché non basta denominare le directory allo stesso modo su ciascun sistema e installare il proprio font preferito sull'altro sistema. La sintassi "Foo-42" funziona ovunque. – jrockway

risposta

4

nota che se in Lisp è if-then-else. così, nel tuo primo caso lo stai facendo se windows, imposta il font, ELSE imposta il loadpath per windows! poi in modo indipendente, stai facendo se linux setta il font, altrimenti imposta il loadpath per linux!

provare

(if (eq system-type 'windows-nt) 
    (progn 
     (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path)) 
     (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1") 
    ) 
    (progn 
      (setq load-path (cons "~/elisp/org-current/lisp" load-path)) 
      (set-default-font "Inconsolata-11") 
    ) 
) 

questo non funziona su Mac, o qualsiasi altra cosa, ma se siete sempre e solo con NT o Linux, questo dovrebbe funzionare. Altrimenti puoi attaccare l'altro se fuori dal secondo progr ...

+0

Grazie mille, Brian. Apprezzo molto la spiegazione della "if" statement if-then-else nature. Ho pensato che fosse strano il modo in cui le due affermazioni nel "se" erano rientrate a diversi livelli e sapevano che non era insignificante - è così ovvio ora. Vado per l'approccio di avere istruzioni 'if' separate per ogni tipo, ma semplicemente racchiudendo la condizione True nel blocco' progn() 'come hai descritto, tralasciando effettivamente la clausola else. Grazie ancora. Saluti! –

+0

che funziona anche. ricorda sempre, emacs non fa niente senza motivo. se indentazione qualcosa in un modo che ti sorprende, probabilmente hai fatto qualcosa di sbagliato B-) –

+4

Puoi anche usare il costrutto 'when', che è come' if' ma non ha nessun ramo "else". Valuta più righe (come se ci fosse un 'progn' implicito), quindi il tuo esempio originale funzionerebbe se tu avessi appena rimpiazzato' if' con 'when'. – pheaver

Problemi correlati