如何以编程方式确定ELisp在哪个OS Emacs下运行?
我想.emacs
根据操作系统运行不同的代码。
Answers:
该system-type
变量:
system-type is a variable defined in `C source code'.
Its value is darwin
Documentation:
Value is symbol indicating type of operating system you are using.
Special values:
`gnu' compiled for a GNU Hurd system.
`gnu/linux' compiled for a GNU/Linux system.
`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 indicates some sort of Unix system.
对于刚接触elisp的人们,可以使用以下示例:
(if (eq system-type 'darwin)
; something for OS X if true
; optional something if not
)
progn
这对于代码块是必要的),所以给不熟悉怪癖的每个人一个建议-查看此答案。
progn
如果您没有其他情况,则实际上不需要@ kermit666 。我的意思是,您可以使用when
代替if
,它等效于(if ... (progn ...) '())
cond
:(case system-type ((gnu/linux) "notify-send") ((darwin) "growlnotify -a Emacs.app -m"))
case
不是cond
。case
可以正常工作,因为它system-type
是一个符号,例如'gnu/linux
或darwin
,而不是字符串
现在也有Linux的子系统的基于Windows(Windows 10下的bash),其中system-type
为gnu/linux
。要检测此系统类型,请使用:
(if
(string-match "Microsoft"
(with-temp-buffer (shell-command "uname -r" t)
(goto-char (point-max))
(delete-char -1)
(buffer-string)))
(message "Running under Linux subsystem for Windows")
(message "Not running under Linux subsystem for Windows")
)
多数人已经回答了这个问题,但是对于那些感兴趣的人,我只是在FreeBSD上进行了测试,因此报告的值为“ berkeley-unix”。