获取Emacs Lisp中的当前目录

问题描述:

我正在尝试编写一个.dir-locals.el文件。我想动态地找到文件所在的目录,并将它与“标签”连接起来。这是我第一次尝试:获取Emacs Lisp中的当前目录

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

这是行不通的。我不是Emacs Lisp专家。它有什么问题?

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

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

从技术上讲,你需要做这样的事情来获取代码的形式来评价内部.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文件,但更灵活,你可以把它里面的代码。这是我个人如何解决您的问题。

+0

这是否意味着启动Emacs之后,我必须始终将其指向标记文件时,我打电话找' - tag'? Emacs会记住我下次启动时使用的标签文件吗? – hekevintran 2011-05-07 19:13:17

+0

1.是,2.不是。但是,请参阅编辑我的答案。 – sanityinc 2011-05-08 07:28:51

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

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

我觉得你想要做什么(在一个稍微低效的方式,因为我们必须寻找.DIR本地人。 el两次)。

在linux下,怎么样:

(getenv "PWD")