获取Emacs Lisp中的当前目录

时间:2011-05-06 22:55:24

标签: emacs elisp

我正在尝试编写.dir-locals.el文件。我想动态找到该文件所在的目录,并将其与“TAGS”连接。这是我的第一次尝试:

((nil . ((tags-file-name . (concat default-directory "TAGS")))))

这不起作用。我不是Emacs Lisp专家。这有什么问题?

4 个答案:

答案 0 :(得分:2)

结合sanityinc的解决方案和我在别处找到的其他一些片段,我得到:

((nil . ((eval . (setq tags-file-name (concat (locate-dominating-file buffer-file-name ".dir-locals.el") "TAGS"))))))

我认为它可以满足您的需求(效率稍低,因为我们必须两次查找.dir-locals.el)。

答案 1 :(得分:2)

在linux中,怎么样:

(getenv "PWD")

答案 2 :(得分:1)

从技术上讲,您需要执行以下操作才能在.dir-locals.el内获取代码表单以进行评估:

((nil . ((eval . (setq tags-file-name (concat default-directory "TAGS"))))))

但是,我尝试了这一点,default-directory在执行nil中的代码时似乎是dir-locals,所以看起来你做的不可能。

那就是说tags-file-name看起来不像是手动设置的。相反,当您第一次访问标记文件时,它会由标记代码设置。

那么为什么不让它取消设置并只使用标签功能?毕竟,TAGS是默认的标签文件名。

编辑:您可能还会考虑使用附加project-local-variables库,该库使用类似的每个项目.el文件,但对于您可以放入的代码更灵活它。这就是我亲自解决你的问题的方法。

答案 3 :(得分:0)

我不清楚你想要什么,但(concat default-directory "TAGS")看起来是正确的。

如果您想设置tags-file-name变量,可以这样做:(setq tags-file-name (concat default-directory "TAGS"))