5

我试图将我所有的 emacs 配置置于版本控制之下,以便在不同的计算机之间轻松切换。实际上,我首选的系统是带有http://emacsformacosx.com/的 emacs 24.3 的 OSX (10.8.3) 。但我也可以在通常配备 emacs 23.4 的其他系统中工作(更可能是基于 linux 的系统,尽管不同的发行版 ubuntu/scientific-linux)。我想要的是一个 init 文件,它检查 emacs 的版本和操作系统,从 emacs 包管理器加载所需的包。到目前为止,我在 OSX 上用于 emacs 24.3 的 .emacs 初始化文件如下

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

加上其他一些依赖于已经内置包的东西我承认我不知道如何开始拥有一个可以在所有设备中无差别地使用的 .emacs 初始化文件。此外,我还想有一种基于系统配置加载 url-proxy-services 的方法

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

感谢您的任何帮助

4

3 回答 3

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
  ))
于 2013-06-11T14:09:54.307 回答
1

Along with giornado answer, you can also put your package-specific settings in a way they will be evaluated only when the package is present by testing the (require) result. Example with the bbdb package:

(when (require 'bbdb nil t)
    (progn ...put your (setq) and other stuff here... ))
于 2013-06-11T14:38:10.387 回答
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))

等等

于 2013-10-17T07:38:13.993 回答