请问 lisp 语法问题

请问在使用 alist-get 时,将图中蓝色区域的 'debian 替换成类似下方 (system-name) 的正确写法是?

ELISP> (alist-get (intern system-name) '((fedora . 1) (debian . 2)))
1 (#o1, #x1, ?\C-a)
2 个赞

Cool ~ :+1:非常感谢! :+1: :+1: :+1: :raised_hands:

在emacs中验证elisp代码的语法是否正确最快的方法就是 eval 这块的 expression。报错的话,会有报错的信息,然后再修改代码继续调试。

1 个赞

好的!谢谢!以后我也一定会先 eval 的。
其实发帖提问前,我将这段代码 eval 过了,但没有报错信息!也无法获得正确结果!
:laughing:所以才向大家求助的!
无论如何,都很感谢你,给我提供了多一种解决问题的思路! :+1:

不客气 :blush:,我估计简单的使用 (system-name) 也无法准确获取操作系统的类型吧。因为它获取的是 host name。

(system-name)

 Return the host name of the machine you are running on, as a string.
 
 Probably introduced at or before Emacs version 19.23.

要获取操作系统的类型,linux可以读取 /etc/os-release 下的信息。

下面是centos的信息:

╭─geekinney@VM-16-14-centos ~
╰─$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

manjaro信息

╭─geekinney@mjgnpi4 ~
╰─$ cat /etc/os-release
NAME="Manjaro ARM"
ID="manjaro-arm"
ID_LIKE="manjaro arch"
PRETTY_NAME="Manjaro ARM"
ANSI_COLOR="1;32"
HOME_URL="https://www.manjaro.org/"
SUPPORT_URL="https://forum.manjaro.org/c/arm/"
LOGO=manjarolinux

可以根据 ID 或者 name 来匹配。

1 个赞

Mac和windows用:

(eq system-type 'darwin) ;; => t
(eq system-type 'windows-nt) ;; => t
1 个赞

再次感谢 :blush::+1:t2:!学到啦!