如何在Emacs中选择系统类型

Zac*_*ung 5 emacs elisp

我正在尝试将我的.emacs文件配置为在Windows,Linux和Mac环境中工作 - 具体来说,我需要它为org-mode选择正确的字体和某个目录.

我尝试了下面加载正确的字体,但没有加载为org-mode指定的路径:

;; On Windows
(if (eq system-type 'windows-nt)
    (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1")
  (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path))
  )

;; On Linux
(if (eq system-type 'gnu/linux)
    (set-default-font "Inconsolata-11")
  (setq load-path (cons "~/elisp/org-current/lisp" load-path))
  )

我尝试了以下内容,在我的Windows机器上返回错误Font Inconsolata-11 is not defined,并在我的Linux机器上返回错误Font -outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1 is not defined.对于这两者,未加载指定的组织路径:

;; On Windows
(if (eq system-type 'windows-nt)
    (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path))
  (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1")
  )

;; On Linux
(if (eq system-type 'gnu/linux)
    (setq load-path (cons "~/elisp/org-current/lisp" load-path))
  (set-default-font "Inconsolata-11")
  )

system-type在两个环境中评估了变量,并且它们都正确评估.

任何人都可以看到什么是错的 - 而且,我不是很精通emacs-lisp,你能看到我正在做出的错误假设吗?

谢谢Zachary

Bri*_*tow 5

请注意,lisp 中的 if 是 if-then-else。所以,在第一种情况下,如果是 Windows,则设置字体,否则设置 Windows 的加载路径!然后,如果 linux 设置字体,则独立地进行操作,否则设置 linux 的加载路径!

尝试

(if (eq system-type 'windows-nt)
    (progn
       (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path))
       (set-default-font "-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1")
     )
     (progn
            (setq load-path (cons "~/elisp/org-current/lisp" load-path))
            (set-default-font "Inconsolata-11")
     )
)
Run Code Online (Sandbox Code Playgroud)

这在 Mac 或其他平台上不起作用,但如果您只使用过 NT 或 Linux,那么这应该可以。否则,如果在第二个程序之外,您可以粘贴另一个...

  • 您还可以使用“when”构造,它类似于“if”,但没有“else”分支。它评估多行(就好像有一个隐式的“progn”),因此如果您只需将所有“if”替换为“when”,您原来的示例就可以工作。 (4认同)