我可以阻止 Emacs 每次打开文件时都重置默认目录吗?

Can I stop Emacs from resetting default-directory every time I open a file?

我已经在 Emacs 上问过同样的问题。如果不允许,对不起,我会删除问题。

如果我:

文件查找器中的默认目录将为 ~/Projects/ruby-play

我希望看到的是默认目录仍然是 ~

我应该使用 package/hook/Elisp 函数来实现这一点吗?

非常感谢!

一种方法是将 initial-default-directory 设置为 nil,但这样您将根本没有默认目录,甚至没有您的主目录:

(setq insert-default-directory nil)

如果您希望您的主目录显示为默认目录,这可不容易做到。当交互式调用 find-file 时,这会导致调用 read-file-name,它具有相当复杂的默认行为。

default-directory 上使用 setq-default 没有帮助,因为它的值是在访问您当前看到的缓冲区文件时设置的。

我看到的唯一选择是像这样使用您自己的 find-file 版本:

(defun my-find-file-read-args (prompt mustmatch)
  (list (read-file-name prompt "~/" nil mustmatch)
    t))

(defun my-find-file (filename &optional wildcards)
  "Edit file FILENAME.
Like `find-file` but always uses ~ as the default directory"
  (interactive
   (my-find-file-read-args "Find file: "
                        (confirm-nonexistent-file-or-buffer)))
  (let ((value (find-file-noselect filename nil nil wildcards)))
    (if (listp value)
    (mapcar 'switch-to-buffer (nreverse value))
      (switch-to-buffer value))))

(global-set-key (kbd "C-x C-f") 'my-find-file)