emacs lisp expand-file-name to string

配置 Python 环境 jedi 需要设置标准库和第三方库路径,不然好像无法自动找到路径,所以就成了这样:

(setq jedi:server-args
      '("--sys-path" "/usr/lib/python3.6"
        "--sys-path" "/home/jerryzhang/.local/lib/python3.6/site-packages"))

考虑到不够优雅,用户的主目录想通过 lisp 获取,直接用 ~ 来代替,不行,似乎不会解析相对路径。lisp 有个函数叫 expand-file-name 可以做各种路径的处理,于是就改成了:

(setq jedi:server-args
          '("--sys-path" "/usr/lib/python3.6"
            "--sys-path" (expand-file-name "~/.local/lib/python3.6/site-packages")))

C-x C-e 运行 (expand-file-name "~/.local/lib/python3.6/site-packages") 得到的结果也是 /home/jerryzhang/.local/lib/python3.6/site-packages=,但是放到一起就不行了,似乎 =expand-file-name 函数不会执行,而当成一个字符串来处理的。

不太了解 lisp,所以就 发帖 问了一下,解决办法有两种:

  1. 使用 list 即:

    (setq jedi:server-args
              (list
               "--sys-path" "/usr/lib/python3.6"
               "--sys-path" (expand-file-name "~/.local/lib/python3.6/site-packages")
               ))
    
  2. 使用单个反引号,也可以:

    (setq jedi:server-args
          `(
            "--sys-path" "/usr/lib/python3.6"
            "--sys-path" ,(expand-file-name "~/.local/lib/python3.6/site-packages")
            ))
    

    注意 expand-file-name 前面的 ,


via:

Date: 2019-07-01 10:28:00

Author: JerryZhang