2010-03-04 14 views
5

Estoy intentando configurar mi archivo .emacs para que funcione en un entorno Windows, Linux y Mac; específicamente, necesito que elija la fuente correcta y un directorio determinado para la organización. modo.Cómo elegir el tipo de sistema en Emacs

He intentado lo siguiente, que carga la fuente correcta, pero no se carga la ruta especificada de 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)) 
) 

He intentado lo siguiente, que en mi máquina Windows devuelve el error Font Inconsolata-11 is not defined, y en mi máquina Linux devuelve el error Font -outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1 is not defined. Por tanto, el camino org especificado no está cargado:

 
;; 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") 
) 

I evaluó la variable system-type en ambos entornos, y ambos evaluar correctamente.

¿Alguien puede ver lo que está mal? Además, no soy muy versado en emacs-lisp, ¿puede ver qué suposiciones incorrectas estoy haciendo?

Gracias, Zachary

+2

Está asumiendo que 'if' es' when', que no lo es. Además, ¿por qué no nombrar los directorios igual en cada sistema e instalar su fuente favorita en el otro sistema? La sintaxis "Foo-42" funciona en todas partes. – jrockway

Respuesta

4

nota que si en Lisp es if-then-else. entonces, en el primer caso que está haciendo si Windows, establece la fuente, ELSE establece el loadpath para Windows! entonces de forma independiente, estás haciendo esto si Linux establece la fuente, sino configura el loadpath para Linux.

tratar

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

esto no va a funcionar en Mac, o lo que sea, pero si usted está usando solamente siempre NT o Linux, esto debería funcionar. De lo contrario, puede pegar el otro si está fuera del 2º progn ...

+0

Muchas gracias, Brian. Realmente aprecio la explicación de la naturaleza if-then-else de las declaraciones 'if'. Pensé que era extraño la forma en que las dos declaraciones en el 'si' tenían sangría en diferentes niveles y sabía que no era insignificante, es tan obvio ahora. Me inclino por el enfoque de tener sentencias 'if' separadas para cada tipo, pero simplemente adjuntando la condición True en el bloque' progn() 'como describiste, omitiendo de hecho la cláusula else. Gracias de nuevo. ¡Aclamaciones! –

+0

que también funciona. recuerda siempre, emacs no hace nada sin ninguna razón. si está sangrando algo de una manera que te sorprende, probablemente hayas hecho algo mal B-) –

+4

También puedes usar el constructo 'when', que es como' si' pero no tiene rama 'else'. Evalúa varias líneas (como si hubiera un 'progn' implícito), por lo que su ejemplo original funcionaría si acabara de reemplazar todo' if' con 'when'. – pheaver

Cuestiones relacionadas