2013-06-11 3 views
5

Я пытаюсь поместить всю конфигурацию emacs под управлением версии, чтобы легко переключаться между разными компьютерами. На самом деле моей предпочтительной системой является OSX (10.8.3) с emacs 24.3 от http://emacsformacosx.com/. Но я могу работать и в других системах (скорее, на Linux, хотя и в другом дистрибутиве ubuntu/science-linux), которые обычно оснащены emacs 23.4. Я хотел бы иметь файл инициализации, который проверяет версию emacs и операционной системы, загружает необходимые пакеты из диспетчера пакетов emacs. До сих пор мои .emacs файл инициализации для Emacs 24,3 на OSX нижеследовалshare emacs конфигурация между emacs 23 и emacs 24

(require 'package) 
(setq package-archives '(
    ("marmalade" . "http://marmalade-repo.org/packages/") 
    ("org" . "http://orgmode.org/elpa/") 
    ("melpa" . "http://melpa.milkbox.net/packages/"))) 
(package-initialize) 

После того, что существуют конфигурации (загружается отдельно, как, например,

(load "python-sy") 

, который использует некоторые пакеты не установлены по умолчанию: в частности

color-theme 
org-mode 
theme-changer 
ess-site 
magit 
auctex 
python.el (fgallina implementation) 

плюс некоторых других вещей, которые полагаются в уже застроенных в пакетах Я признаю, что я не имею ни малейшего представления о хо w, чтобы начать с файла инициализации .emacs, который можно было бы равнодушно использовать во всех устройствах. Кроме того, я также хотел бы иметь возможность загружать URL-прокси-сервисы на основе конфигурации системы

(setq url-proxy-services '(("http" . "proxy.server.com:8080"))) 

Спасибо за любую помощь

+0

Вы можете получить версию 'package.el' для Emacs 23; перейдите по ссылке на странице [ELPA EmacsWiki] (http://www.emacswiki.org/emacs/ELPA). (Обязательно переместите его в сторону, если/когда рассматриваемые системы будут обновлены до Emacs 24.) – legoscia

ответ

4

Соответствующие переменные являются system-type и emacs-major-version. Вы можете использовать что-то вроде следующего

(if (>= emacs-major-version 24) 
    (progn 
     ;; Do something for Emacs 24 or later 
    ) 
    ;; Do something else for Emacs 23 or less 
) 

(cond 
((eq system-type 'windows-nt) 
    ;; Do something on Windows NT 
) 
((eq system-type 'darwind) 
    ;; Do something on MAC OS 
) 
((eq system-type 'gnu/linux) 
    ;; Do something on GNU/Linux 
) 
;; ... 
(t 
    ;; Do something in any other case 
)) 
1

Наряду с giornado ответ, вы также можете поместить свои настройки для пакета так, как они будут оцениваться только тогда, когда пакет присутствует путем тестирования (require) результата. Пример с bbdb пакета:

(when (require 'bbdb nil t) 
    (progn ...put your (setq) and other stuff here...)) 
+0

Не лучше ли 'eval-after-load'? Это уменьшает время запуска и выполняет код только при необходимости. – giordano

+0

Уважаемый Джордано, можете ли вы сделать мне пример использования eval-after-load? –

+2

@giordano: 'eval-after-load' позволяют выполнять код только при загрузке пакета. В моем примере есть несколько пакетов, которые я хочу загрузить при запуске, но без ошибки, если packahe нет (я использовал, чтобы делиться своими «.emacs» между Linux, Windows и компьютерами Mac, и не все одинаковые пакеты были установлены в каждом). – Seki

0

В этой ситуации я определяю несколько констант в верхней части .emacs:

(defconst --xemacsp (featurep 'xemacs) "Is this XEmacs?") 
(defconst --emacs24p (and (not --xemacsp) (>= emacs-major-version 24))) 
(defconst --emacs23p (and (not --xemacsp) (>= emacs-major-version 23))) 
(defconst --emacs22p (and (not --xemacsp) (>= emacs-major-version 22))) 
(defconst --emacs21p (and (not --xemacsp) (>= emacs-major-version 21))) 

Пример использования:

(when --emacs24p 
    (require 'epa-file) 
    (epa-file-enable) 
    (setq epa-file-cache-passphrase-for-symmetric-encryption t) ; default is nil 
    ) 

Или:

(if --emacs22p 
     (c-toggle-auto-newline 1) 
    (c-toggle-auto-state 1)) 

и т. Д.

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