用于PC / Mac的.emacs中的不同设置

时间:2010-09-15 15:01:42

标签: emacs

我需要在.emacs中设置不同的设置,具体取决于我的系统(Mac或PC)。

post教授如何了解我的emacs正在运行的系统。

  • 如何检查变量'system-type'是否设置emacs中的内容?
  • 我应该在.emacs中为PC和Mac设置不同的代码?
???
(when (eq system-type 'windows-nt') 
)

3 个答案:

答案 0 :(得分:8)

你可以这样做:

(if (equal system-type 'windows-nt)
    (progn
         (... various windows-nt stuff ...)))
(if (equal system-type 'darwin)
    (progn
         (... various mac stuff ...)))

我在.emacs中所做的是根据机器类型和名称设置一个变量(我称之为this-config)。然后我到处都使用相同的.emacs。

使用此代码,我可以拉出机器名称:

(defvar this-machine "default")
(if (getenv "HOST")
    (setq this-machine (getenv "HOST")))
(if (string-match "default" this-machine)
    (if (getenv "HOSTNAME")
        (setq this-machine (getenv "HOSTNAME"))))
(if (string-match "default" this-machine)
    (setq this-machine system-name))

然后,您可以根据系统类型和/或计算机名称设置this-config。

然后我使用这段代码:

(cond ((or (equal this-machine "machineX")
           (equal this-machine "machineY"))
       (do some setup for machineX and machineY))

编辑:system-type返回符号,而不是字符串

答案 1 :(得分:1)

我的emacs说darwin,这是OSX构建的开放操作系统的名称。要查看值,请在system-type上执行describe-variable。

请注意,mac也有几种可能的窗口类型,因此您可能需要做出更多决定。

答案 2 :(得分:1)

这样做:

(if (eq window-system 'w32)
    (progn
... your functions here for Microsoft Windows ...
))

window-system是一个函数,它返回窗口系统的名称。

system-type是一个变量。执行 C-h v system-type RET 以获取您所支持的系统类型列表:

来自帮助:

  `gnu'          compiled for a GNU Hurd system.
  `gnu/linux'    compiled for a GNU/Linux system.
  `gnu/kfreebsd' compiled for a GNU system with a FreeBSD kernel.
  `darwin'       compiled for Darwin (GNU-Darwin, Mac OS X, ...).
  `ms-dos'       compiled as an MS-DOS application.
  `windows-nt'   compiled as a native W32 application.
  `cygwin'       compiled using the Cygwin library.
Anything else (in Emacs 23.1, the possibilities are: aix, berkeley-unix,
hpux, irix, lynxos 3.0.1, usg-unix-v) indicates some sort of
Unix system.