2010-03-04 13 views
5

Ich versuche, meine .emacs-Datei so zu konfigurieren, dass sie in einer Windows-, Linux- und Mac-Umgebung funktioniert. Insbesondere muss ich die richtige Schriftart und ein bestimmtes Verzeichnis für die Organisation auswählen. Modus.So wählen Sie den Systemtyp in Emacs

ich folgendes versucht haben, die die richtige Schriftart lädt, aber nicht geladen den Pfad für org-Modus angegeben:

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

ich folgendes versucht haben, die auf meinem Windows-Rechner Font Inconsolata-11 is not defined den Fehler zurückgibt, und auf meinem Linux-Rechner gibt den Fehler Font -outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1 is not defined zurück. Für beide wird die angegebene org Pfad nicht geladen:

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

ich die system-type Variable in beiden Umgebungen ausgewertet, und sie beide bewerten richtig.

Kann jemand sehen, was falsch ist - auch, ich bin nicht sehr versiert in Emacs-Lisp, können Sie sehen, was falsche Annahmen ich mache?

Danke, Zachary

+2

Du nimmst an, "if' ist' wann', was nicht ist. Warum sollten Sie nicht einfach die Verzeichnisse auf jedem System gleich benennen und Ihre Lieblingsschrift auf dem anderen System installieren? Die "Foo-42" -Syntax funktioniert überall. – jrockway

Antwort

4

beachten Sie, dass, wenn in Lisp ist if-then-else. Also, in Ihrem ersten Fall tun Sie, wenn Windows, stellen Sie die Schriftart, ELSE legen Sie den Ladepfad für Windows! dann unabhängig, Sie tun, wenn Linux Schriftart, sonst legen Sie den loadpath für Linux!

versuchen

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

diese wird auf dem Mac nicht funktionieren, oder was auch immer, aber wenn man immer nur mit NT oder Linux ist, soll diese Arbeit. Sonst kannst du den anderen stecken, wenn du außerhalb der 2. Prognose liegst ...

+0

Vielen Dank, Brian. Ich schätze die Erklärung der "wenn" -Aussagen, wenn-dann-sonst-Natur. Ich fand es merkwürdig, wie die beiden Aussagen im 'if' auf verschiedenen Ebenen eingerückt waren und wussten, dass es nicht unbedeutend war - es ist jetzt so offensichtlich. Ich gehe für den Ansatz, getrennte 'if'-Anweisungen für jeden Typ zu haben, aber einfach die Wahr-Bedingung in' progn() 'Block wie Sie beschrieben einzuschließen, effektiv die else-Klausel weglassen. Danke noch einmal. Prost! –

+0

das funktioniert auch. Denken Sie immer daran, Emacs macht nichts ohne Grund. Wenn Sie etwas auf eine Weise einrücken, die Sie überrascht, haben Sie wahrscheinlich etwas falsch gemacht. B-) –

+4

Sie können auch das Konstrukt 'when' verwenden, das wie' if' aussieht, aber keinen "else" -Zweig hat. Es wertet mehrere Zeilen aus (als ob es eine implizite "Prognose" gibt), also würde Ihr ursprüngliches Beispiel funktionieren, wenn Sie nur alle "if" durch "when" ersetzt hätten. – pheaver

Verwandte Themen