2015-04-30 26 views
0

我已經在Emacs上提出了同樣的問題。如果不允許,我很抱歉,我會刪除這個問題。每次打開文件時,是否可以停止Emacs重置default-directory?

如果我:

  • 啓動Emacs,我的主目錄(~
  • 發現在~/Projects/ruby-play目錄中的文件與C-x C-f
  • 嘗試找到另一個文件與C-x C-f

文件查找器中的默認目錄將是~/Projects/ruby-play

我想看到的是默認目錄仍爲~

我應該使用包/掛鉤/ Elisp函數來實現此目的嗎?

非常感謝!

+1

你知道,當你輸入文件路徑,你可以簡單地鍵入'/〜/'在任何時間點忽略該點之前的所有內容,並從'〜/'開始查找? (同樣用'//'去文件系統根目錄。) – phils

+0

我是,謝謝。但是,我想保留從Emacs開始的目錄,而不僅僅是主目錄。 –

回答

2

的一種方法是設置initial-default-directorynil,但你不會有一個默認的目錄中的所有,甚至不是你的主目錄:

(setq insert-default-directory nil) 

如果你希望你的home目錄露面作爲默認設置,這不容易做到。在交互式調用find-file時,會導致read-file-name的調用,該調用具有相當複雜的默認行爲。

使用setq-defaultdefault-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) 
+0

哇。謝謝。 'ido-find-file-in-dir'不會幫助我嗎? –

+0

我不使用ido,所以我不知道。 – schaueho

相關問題