获取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文件,但更灵活,你可以把它里面的代码。这是我个人如何解决您的问题。
答
结合sanityinc的解决方案和其他一些片断我在别处找到了,我得到:
((nil . ((eval . (setq tags-file-name (concat (locate-dominating-file buffer-file-name ".dir-locals.el") "TAGS"))))))
我觉得你想要做什么(在一个稍微低效的方式,因为我们必须寻找.DIR本地人。 el两次)。
答
在linux下,怎么样:
(getenv "PWD")
这是否意味着启动Emacs之后,我必须始终将其指向标记文件时,我打电话找' - tag'? Emacs会记住我下次启动时使用的标签文件吗? – hekevintran 2011-05-07 19:13:17
1.是,2.不是。但是,请参阅编辑我的答案。 – sanityinc 2011-05-08 07:28:51