我可以阻止 Emacs 每次打开文件时都重置默认目录吗?
Can I stop Emacs from resetting default-directory every time I open a file?
我已经在 Emacs 上问过同样的问题。如果不允许,对不起,我会删除问题。
如果我:
- 在我的主目录中启动 Emacs (
~
)
- 在
~/Projects/ruby-play
目录中找到 C-x C-f
的文件
- 尝试使用
C-x C-f
查找另一个文件
文件查找器中的默认目录将为 ~/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)
我已经在 Emacs 上问过同样的问题。如果不允许,对不起,我会删除问题。
如果我:
- 在我的主目录中启动 Emacs (
~
) - 在
~/Projects/ruby-play
目录中找到C-x C-f
的文件
- 尝试使用
C-x C-f
查找另一个文件
文件查找器中的默认目录将为 ~/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)