2010-03-04 2 views
5

Я пытаюсь настроить мой файл .emacs для работы в среде Windows, Linux и Mac - в частности, мне нужно выбрать правильный шрифт и определенный каталог для org- Режим.Как выбрать тип системы в Emacs

Я попытался следующий, загружающие правильный шрифт, но не загружает указанный путь для орга-режима:

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

Я попытался следующий, на моей машине Windows, возвращает ошибку Font Inconsolata-11 is not defined и на моей машине Linux возвращается ошибка Font -outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1 is not defined. Для обоих, указанный путь орг не загружен:

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

я оценил переменную system-type в обеих средах, и они оба правильно оценить.

Может ли кто-нибудь понять, что не так? Кроме того, я не очень разбираюсь в emacs-lisp, можете ли вы понять, какие неправильные предположения я делаю?

Спасибо, Zachary

+2

Вы принимаете 'if'' 'когда это, а это не так. Кроме того, почему бы не просто назвать каталоги одинаковыми для каждой системы и установить свой любимый шрифт в другой системе. Синтаксис «Foo-42» работает повсеместно. – jrockway

ответ

4

отмечают, что если в лепет, если-то-иначе. поэтому в первом случае вы делаете, если окна, установите шрифт, ELSE установите путь загрузки для окон! то независимо, вы делаете, если linux устанавливаете шрифт, иначе задайте путь загрузки для Linux!

попробовать

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

это не будет работать на Mac, или любой другой, но если вы только когда-либо с помощью NT или Linux, это должно работать. В противном случае вы можете придерживаться другого, если за пределами второго progn ...

+0

Большое спасибо, Брайан. Я очень благодарен за объяснение выражений 'if' if-then-else. Мне показалось странным то, как два утверждения в «if» были отступом на разных уровнях и знали, что это не было ничтожно. Это так очевидно сейчас. Я собираюсь использовать отдельные инструкции 'if' для каждого типа, но просто включаю условие True в блок' progn() ', как вы описали, эффективно опуская предложение else. Еще раз спасибо. Ура! –

+0

это тоже работает. всегда помните, emacs ничего не делает без причины. если это отступы что-то таким образом, что вас удивляет, вы, вероятно, сделали что-то не так. B-) –

+4

Вы также можете использовать конструкцию 'when', которая похожа на' if', но не имеет ветви else. Он оценивает несколько строк (как будто есть неявный 'progn'), поэтому ваш исходный пример будет работать, если вы просто заменили все' if' на 'when'. – pheaver

Смежные вопросы