2015-04-30 5 views
0

Я уже задал тот же вопрос на Emacs. Если это не разрешено, извините, и я удалю вопрос.Могу ли я остановить Emacs от сброса каталога по умолчанию при каждом открытии файла?

Если я:

  • Начало Emacs в моем домашнем каталоге (~)
  • Найти файл в каталоге ~/Projects/ruby-play с C-x C-f
  • Попробуйте найти другой файл с C-x C-f

Каталог по умолчанию в поисковом файле будет ~/Projects/ruby-play.

То, что я хотел бы видеть, является по умолчанию каталогом ~.

Есть ли пакет/крюк/функция Elisp, которую я должен использовать, чтобы это произошло?

спасибо!

+1

Вы знаете, что, когда вы входите в путь к файлу, вы можете просто ввести '/ ~ /' в любой точке на игнорировать все, что предшествует этой точке, и начать поиск с '~ /'? (И аналогично с '//', чтобы добраться до корня файловой системы.) – phils

+0

Я, спасибо. Тем не менее, я хотел бы сохранить каталог, в котором я запускал Emacs, а не только домашний каталог. –

ответ

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) 
+0

Ничего себе. Спасибо. Не будет ли «ido-find-file-in-dir» помочь мне? –

+0

Я не использую ido, поэтому не знаю. – schaueho