每次打开文件时,我都可以阻止Emacs重置default-directory吗?

时间:2015-04-30 10:01:46

标签: emacs directory editing

我已经在Emacs上提出了同样的问题。如果不允许,我很抱歉,我会删除这个问题。

如果我:

  • 在我的主目录(~
  • 中启动Emacs
  • 使用~/Projects/ruby-play
  • C-x C-f目录中查找文件
  • 尝试使用C-x C-f
  • 查找其他文件

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

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

我是否应该使用package / hook / Elisp函数来实现这一目标?

非常感谢!

1 个答案:

答案 0 :(得分:2)

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

(setq insert-default-directory nil)

如果您希望主目录显示为默认目录,则无法轻松完成此操作。以交互方式调用find-file时,会调用read-file-name,其默认行为相当复杂。

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

我看到的唯一选择是使用您自己的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)
相关问题