2013-06-11 23 views
5

Ich versuche, alle meine Emacs-Konfiguration unter Versionskontrolle zu setzen, um einfach zwischen verschiedenen Computern zu wechseln. Mein bevorzugtes System ist OSX (10.8.3) mit emacs 24.3 von http://emacsformacosx.com/. Aber ich kann auch in anderen Systemen arbeiten (eher Linux-basierte, obwohl verschiedene Distribution Ubuntu/Scientific-Linux), die in der Regel mit Emacs 23.4 ausgestattet sind. Was ich möchte, ist eine Init-Datei, die die Version von Emacs und das Betriebssystem überprüfen, laden Sie die benötigten Pakete von Emacs-Paket-Manager. Bisher meine .emacs init für Emacs 24.3 auf OSX-Datei alsshare emacs configuration zwischen emacs 23 und 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) 

Nach folgen ist, dass es Konfiguration sind (

(load "python-sy") 

separat wie beispielsweise geladen, das einige Pakete verwendet nicht als Standard installiert: insbesondere

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

plus einige andere Dinge, die in bereits eingebauten in Paketen beruht ich zugeben, dass ich keine Ahnung, auf ho haben w mit einer .emacs init-Datei zu beginnen, die in allen Geräten gleichgültig verwendet werden könnte. Außerdem würde Ich mag auch eine Möglichkeit haben, url-Proxy-Dienste basierend auf der Systemkonfiguration

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

Vielen Dank für jede Hilfe

+0

Sie können eine Version von 'package.el' für Emacs 23 erhalten; folgen Sie dem Link auf der [ELPA EmacsWiki Seite] (http://www.emacswiki.org/emacs/ELPA). (Stellen Sie sicher, dass Sie es aus dem Weg räumen, wenn/wenn die fraglichen Systeme auf Emacs 24 aktualisiert werden.) – legoscia

Antwort

4

Relevante Variablen sind system-type und emacs-major-version zu laden. Sie können so etwas wie die folgenden

(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

Zusammen mit giornado Antwort verwenden, können Sie auch Ihr Paket spezifischen Einstellungen in einer Weise, sie werden nur dann ausgewertet werden, wenn das Paket durch Testen des (require) Ergebnis vorliegt. Beispiel mit dem bbdb Paket:

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

Ist 'eval-after-load' nicht besser? Das reduziert die Startzeit und führt Code nur bei Bedarf aus. – giordano

+0

Lieber Giordano, kannst du mir ein Beispiel für die Verwendung von Eval-After-Load geben? –

+2

@giordano: 'eval-after-load' erlaubt das Ausführen von Code nur, wenn Sie ein Paket laden. In meinem Beispiel gibt es mehrere Pakete, die ich beim Start laden möchte, aber ohne einen Fehler zu haben, wenn das Paket nicht vorhanden ist (ich teile meine '.emacs' zwischen einem Linux-, einem Windows- und einem Mac-Host und nicht alle die gleichen Pakete wurden in jedem installiert). – Seki

0

Für diese Situation ich .emacs an der Spitze der wenigen Konstanten definieren:

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

Beispiel Nutzung:

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

Oder:

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

usw.