在GNU emacs中,cd、cd绝对目录和默认目录如何比较?

在GNU emacs中,cd、cd绝对目录和默认目录如何比较?,emacs,elisp,Emacs,Elisp,在定制Emacs时,我应该如何考虑elisp函数cd和cd absolute以及elisp变量默认目录?我的经验使我相信,cd-absolute会更改emacs进程本身的目录(跨缓冲区的全局设置,default directory不是本地设置的),而cd和default directory是缓冲区的本地设置。但是,内置的帮助不足以让我理解,而且我看到的行为让我怀疑cd absolute正在覆盖我正在访问的缓冲区中的默认目录 结束编辑 如果我在这里没有得到答案,我将不得不对列表进行我自己的研究,并

在定制Emacs时,我应该如何考虑elisp函数
cd
cd absolute
以及elisp变量
默认目录
?我的经验使我相信,
cd-absolute
会更改emacs进程本身的目录(跨缓冲区的全局设置,
default directory
不是本地设置的),而
cd
default directory
是缓冲区的本地设置。但是,内置的帮助不足以让我理解,而且我看到的行为让我怀疑
cd absolute
正在覆盖我正在访问的缓冲区中的
默认目录

结束编辑


如果我在这里没有得到答案,我将不得不对列表进行我自己的研究,并且,作为最后的手段,我将不得不阅读源代码。

我认为您误解了默认目录的工作原理。在
.emacs
中设置
默认目录
,对大多数缓冲区没有影响。正在访问文件的缓冲区的
default directory
本地值将自动设置为存储所访问文件的目录。这将超过先前设置的
默认目录的任何值

如果您通过
cd
(或
cd absolute
)更改缓冲区的当前目录,这将仅为该缓冲区设置
默认目录。如果随后打开一个新文件,则新缓冲区的默认目录将设置为新文件的目录

如果打开一个不访问文件的新缓冲区,则此新缓冲区的
默认目录
值将与前一个缓冲区的值相同。只有在这种情况下,
cd
的结果才会应用于从中调用它的缓冲区以外的缓冲区

cd-absolute
不用于交互式使用。据我所知,这是一个方便的函数,它与
cd
不同之处在于路径被视为绝对路径,而不是相对路径


考虑到所有这些,您想做什么?

还有一种情况,即为缓冲区设置了
默认目录
,缓冲区充当进程输入/输出,这取决于您如何启动进程,实际上它的行为有点笨拙。您可以稍后更改该缓冲区中的默认目录,但这不会影响与它关联的进程。泰勒,我不担心我的
.emacs
文件。我正在编写的自定义函数的一个示例是,将当前缓冲区中的文件与我编辑的文件进行区分。我想让它和流浪汉一起工作。我还在尝试。我认为默认目录在这种情况下不会有用。缓冲区文件名和文件名目录,再加上cd,很可能就是你想要的。泰勒的答案是彻底的。我花了几周时间才找到困扰我的行为的原因。结果是
编译开始
默认目录
有冲突。我在自己编写的自定义函数中使用了
compilation start
,但不知道会有什么副作用。我还不知道如何澄清这个问题,但我还有另一个数据点。我使用的是乔·基恩的background.el版本。它设置
默认方向
。我还在研究这个。谢谢你纠正拼写,Richard。我本打算拼写read r-e-e-d,但后来我软化了我的立场。