2013-06-11 162 views
5

我试图将所有emacs配置放在版本控制下,以便在不同计算机之间轻松切换。其实我的首选系统是OSX(10.8.3),其中emacs 24.3从http://emacsformacosx.com/。但我也可以在其他系统上工作(更可能是基于Linux的,虽然不同的发行版ubuntu/scientific-linux),这些系统一般都配有emacs 23.4。我想要的是一个init文件,它检查emacs的版本和操作系统,从emacs package manager加载所需的软件包。 到目前为止,我的.emacs初始化文件的emacs的24.3 OSX上是遵循在emacs 23和emacs之间共享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 init文件。此外,我也想有一种方式来加载基于系统配置

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

感谢您的帮助

+0

您可以获取Emacs 23的'package.el'版本;请按照[ELPA EmacsWiki页面](http://www.emacswiki.org/emacs/ELPA)上的链接进行操作。 (如果有问题的系统升级到Emacs 24时,请确保将其移开。) – legoscia

回答

4

相关变量是system-typeemacs-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是否更好?这可以稍微减少启动时间并仅在必要时执行代码。 – giordano

+0

亲爱的佐丹奴你能否让我使用eval-after-load? –

+2

@giordano:加载后的eval-allow只允许在加载包时执行代码。在我的例子中,我想在启动时加载多个软件包,但如果packahe不存在则不会出现错误(我曾经在Linux,Windows和Mac主机之间共享我的'.emacs',而不是所有的每个都安装了相同的软件包)。 – 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))