【问题标题】:How do cd, cd-absolute, and default-directory compare in GNU emacs?GNU emacs 中的 cd、cd-absolute 和 default-directory 如何比较?
【发布时间】:2013-10-18 16:49:59
【问题描述】:

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

结束编辑

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

【问题讨论】:

  • 我还不确定如何澄清这个问题,但我还有另一个数据点。我正在使用 Joe Keane 的 background.el 版本。它设置default-direcgtory。我还在研究这个。
  • 感谢您修正拼写,Richard。我本来打算拼读 r-e-e-d,但后来我软化了我的立场。 quora.com/profile/Tim-Chambers/Posts/…

标签: emacs elisp


【解决方案1】:

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

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

如果您打开一个不访问文件的新缓冲区,则此新缓冲区的default-directory 值将与前一个缓冲区的值相同。这是cd 的结果将应用于缓冲区而不是调用它的缓冲区的唯一情况。

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

考虑到这一切,你想做什么?

【讨论】:

  • 还有一种情况是为缓冲区设置default-directory,作为进程的输入/输出,这将取决于你如何启动进程,实际上在方式上有点尴尬它的行为。您可以稍后更改该缓冲区中的默认目录,但这不会影响与之关联的进程。
  • 泰勒,我不担心我的.emacs 文件。我正在编写的自定义函数的一个示例是将当前缓冲区中的文件与我编辑的文件进行比较。我希望它与流浪汉一起工作。我还在尝试。
  • 我不认为 default-directory 在这种情况下会有用。 buffer-filename 和 filename-directory 与 cd 相结合,很可能是您所追求的。
  • 泰勒的回答很彻底。我花了几个星期才找到困扰我的行为的原因。原来compilation-startdefault-directory 混为一谈。我在我编写的自定义函数中使用了compilation-start,但不知道该副作用。
猜你喜欢
  • 2014-10-20
  • 1970-01-01
  • 2023-02-01
  • 2021-01-24
  • 2014-05-19
  • 2017-12-06
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多