因为需要在配置文件中加入
(setq org-ditaa-jar-path "/usr/share/java/ditaa/ditaa-0_10.jar")
其中的 ditaa-0_10.jar 文件名随 ditaa 版本而变化。
希望能够动态获取 ditaa jar 文件的路径,因为 /usr/share/java/ditaa 文件夹下只有 ditaa-*.jar,所以我的想法是在配置文件中执行ls /usr/share/java/ditaa
,从而获取当前的文件名。
感谢!
因为需要在配置文件中加入
(setq org-ditaa-jar-path "/usr/share/java/ditaa/ditaa-0_10.jar")
其中的 ditaa-0_10.jar 文件名随 ditaa 版本而变化。
希望能够动态获取 ditaa jar 文件的路径,因为 /usr/share/java/ditaa 文件夹下只有 ditaa-*.jar,所以我的想法是在配置文件中执行ls /usr/share/java/ditaa
,从而获取当前的文件名。
感谢!
写法一,用Emacs Lisp写:
(setq org-ditaa-jar-path (directory-files "/usr/share/java/ditaa" t "ditaa[[:ascii:]]+\\.jar$"))
写法二,用楼主的思路写:
(setq org-ditaa-jar-path (shell-command-to-string "ls /usr/share/java/ditaa/*.jar"))
这种写法会多一个换行符
十分感谢!!
您好,使用第一种写法后出现错误:
(Spacemacs) Error in dotspacemacs/user-config: Wrong type argument: stringp, ("/usr/share/java/ditaa/ditaa-0_10.jar")
类型不符合:directory-files
返回的是 “list”,不是一个 “string”。可以试试
(car (directory-files ...))
去掉最后换行符的几种办法:
(substring "hello\n" 0 -1)
=> "hello"
(replace-regexp-in-string "\n" "" "hello\n")
=> "hello"
;; Emacs 24.4+
(require 'subr-x)
(string-trim "hello\n")
=> "hello"
感谢!
加了 car
就可以了
哈,昨天我也有个同样的需求:
(setq langtool-language-tool-jar
(car (nreverse (file-expand-wildcards
"~/src/LanguageTool-*/languagetool-commandline.jar"))))
=> "~/src/LanguageTool-3.6/languagetool-commandline.jar"
感觉除了用 directory-files
外,file-expand-wildcards
还简单些(通配符 V.S. 正则表达式)。