当PWD在shell模式和term模式下更改时,自动更新默认目录


12

default-directory如果在shell-mode和中更改了工作目录,是否有任何选项或软件包会导致更新term-mode?即,当使用时cd,但该解决方案必须比仅查找此特定命令和其他一些命令更强大- $PWD我认为,它实际上应检查每个命令之后的值。

更重要的是,当从最初创建为本地目录的shell-modeterm-mode缓冲区内部连接到远程计算机时,它也应该起作用default-directory。这实际上是我真正需要的功能:能够以编程方式告诉我在此类终端中键入的命令是否在远程计算机上运行。我想以适当设置的形式获取该信息,default-directory并确定是否有一种获取方法,那么如上所述,执行此操作的工具也将在本地运行。


你调查了dirtrack-mode吗?它有一个挂钩,可以做您想要的。
J大卫·史密斯

Answers:


12

我认为您的问题的第一部分可以解决dirtrack-mode。首先,设置外壳程序提示符以包括当前的工作目录。接下来,设置dirtrack-list一个正则表达式,告诉dirtrack-mode它如何提取它。示例:我PS1在Bash中设置为:

export PS1="[\h:\w] $ "

在Emacs中,我设置dirtrack-list并打开dirtrack-mode

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

(摘自这篇很棒的博客文章。)

之后,我可以随意更改目录,并且可以随时更改default-directory。如果在外壳程序中以相同的方式将提示符设置为SSH,则通过SSH连接到远程计算机(在cd /etc/apache2远程计算机上,将其更改default-directory为),这也可以使用/etc/apache2。但是请注意,这是本地的 -对于远程计算机,default-directory仍将/etc/apache2本地计算机上设置为。

如果我理解您问题的第二部分,则希望default-directory将其设置为像remote-machine:/etc/apache2SSH到另一台计算机时一样。使用 ssh-el时,您可以运行ssh-directory-tracking-mode以使其工作。例如,如果我运行M-x ssh,cd到 /etc/apache2,然后运行C-x C-f,则看到的提示是:

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

您可以手动运行“ Mx ssh-directory-tracking-mode”,但将其设置为ssh-mode的钩子更为方便:

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

更多信息:


2
很好的答案,谢谢!我实际上对此很感兴趣,因为我写的一个软件包具有不断增长的功能,这将使它成为理想的。with-editorMagit的下一版本将使用它。Magit本身不使用with-editorshell-mode/ term-mode-支持,所以我可能不会发布之前集成这一点。但是,一旦我完成了Magit版本的发布,您提供的信息将使操作变得更加容易,并且可以再次专注于其他事情。
tarsius

以下with-editor是Magit外部的入门方法:emacs.stackexchange.com/questions/27/…。导致我问这个问题的Magit问题:github.com/magit/magit/issues/1638
tarsius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.