【问题标题】:How to choose system type in Emacs如何在 Emacs 中选择系统类型
【发布时间】:2010-03-04 19:47:50
【问题描述】:

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

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

;;在 Windows 上 (if (eq system-type 'windows-nt) (设置默认字体“-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1”) (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path)) ) ;;在 Linux 上 (if (eq system-type 'gnu/linux) (设置默认字体“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。对于两者,都没有加载指定的 org 路径:

;;在 Windows 上 (if (eq system-type 'windows-nt) (setq load-path (cons "~/elisp/org-6.34c/lisp" load-path)) (设置默认字体“-outline-Consolas-normal-r-normal-normal-14-97-96-96-c-*-iso8859-1”) ) ;;在 Linux 上 (if (eq system-type 'gnu/linux) (setq load-path (cons "~/elisp/org-current/lisp" load-path)) (设置默认字体“Inconsolata-11”) )

我在两种环境中都评估了system-type 变量,它们都正确评估。

谁能看出哪里出了问题——另外,我对 emacs-lisp 不是很精通,你能看出我在做什么不正确的假设吗?

谢谢, 扎卡里

【问题讨论】:

  • 您假设ifwhen,但事实并非如此。此外,为什么不在每个系统上将目录命名为相同,然后在另一个系统上安装您喜欢的字体。 “Foo-42”语法适用于任何地方。

标签: emacs elisp


【解决方案1】:

注意 if in lisp 是 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")
     )
)

这在 mac 或其他任何东西上都行不通,但如果你只使用过 NT 或 linux,这应该行得通。否则,如果在第二个 progn 之外,您可以坚持另一个...

【讨论】:

  • 非常感谢,布赖恩。我非常感谢if 语句 if-then-else 性质的解释。我确实认为if 中的两个语句在不同级别缩进的方式很奇怪,并且知道它并非微不足道——现在很明显。我打算为每种类型使用单独的 if 语句,但只是像您描述的那样将 True 条件包含在 progn() 块中,有效地省略了 else 子句。再次感谢。干杯!
  • 也可以。永远记住,emacs 不会无缘无故地做任何事情。如果它以一种让你吃惊的方式缩进,你可能做错了什么 B-)
  • 您也可以使用when 构造,它类似于if,但没有“else”分支。它评估多行(好像有一个隐含的progn),所以如果你用when替换所有if,你的原始示例就可以工作。
  • else 子句中不需要progn,所有表单都会被计算
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 2011-01-18
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多