【发布时间】:2015-07-27 21:07:45
【问题描述】:
如何找到调用函数的目录?
例如,如果我拨打电话
(defconst dir default-directory)
dir 的值是包含上述行的fine 所在的目录,而不是我调用它的目录。
提前致谢
【问题讨论】:
-
一个函数不会被“从一个目录”调用,所以你的问题按照目前的措辞没有什么意义。您是在问如何为给定函数找出定义该函数的 elisp 库的路径?
-
目前我有一个名为 foo.el 的文件(例如在 Desktop/ 中),其中包含问题中的行,我正在另一个名为 bar.el 的文件(例如 Documents/ 中)中使用该行该行返回“~/Desktop/”,但我希望它返回“~/Documents/”这有意义吗?
-
不是真的——“在另一个文件中使用该行”是什么意思?这听起来好像两个文件都定义了
(defconst dir default-directory)。在任何情况下,default-directory是一个缓冲区本地值,通常与给定 elisp 库的位置没有任何关系。它的值将在加载和评估您的 elisp 时设置,并且(无需采取其他措施)您将获得评估代码时当前缓冲区的值。 -
对于文件访问缓冲区,
default-directory将是访问文件的父目录。否则,它只是从创建缓冲区时的default-directory值继承而来。 (当然,您可以手动设置该值;通常通过调用cd)。 -
顺便说一下,我认为名称
dir只是为了举例,但如果不是:您的defconst调用定义了一个动态范围变量(elisp 不 真的 有常量),并且您绝对不想使用像dir这样的名称,而动态变量名称没有命名空间前缀,因为这太容易与其他代码中的临时绑定发生冲突。如果你要编译它,字节编译器会抱怨它。