有人可以提供一个钩子来在退出 emacsclient 时将目录更改为 emacsclient 的当前目录吗?
我经常通过终端导航到某些文件,弹出 emacsclient 来编辑某些文件,然后退出 emacsclient 以在同一目录中对文件运行一些 shell 命令。我发现这比其他一些涉及在 emacs 中打开终端的选项更令人满意(包括 popshell、Mx !、multi term 等)
但是,我有时也会在使用 emacsclient 时访问其他目录中的文件,然后想退出 emacsclient 以从我刚刚编辑文件的同一目录中运行一些 shell 命令。但是,当我退出 emacsclient 时,我会返回到打开 emacsclient 的原始目录,然后必须使用 cd 导航到同一目录。这很不方便,并且在我没有注意到的情况下会导致错误,因为目录中的文件结构相似/相同。
更多背景信息:当我在当前工作目录中或附近有一些快速文件需要编辑时,我会启动 emacs --daemon,然后在终端中打开 emacsclient -nw。我发现“Cx Cc”会退出 emacsclient,但也会终止 emacs 守护进程,因此我使用“Cx 5 0”或“Cx #”来退出客户端。
答案1
emacsclient
是一个普通的 shell 命令,因此它不能改变 shell 对当前目录的看法。
但是,您可以emacsclient
像这样调用:
$ cd "$(emacsclient -e '(progn (find-file ....) (print default-directory))')"
即,emacs
在客户端返回时打印新的目录名称。
要想做好这件事并不容易,而且不值得付出努力。
如果您在 emacsclient 中执行的不仅仅是简单的编辑,那么您应该使用 emacs 及其 shell。