Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I change Emacs find-file history?

Tags:

emacs

When I call find-file to open a new file, it generally happens that the file I'm looking for is in one of the directories I've already loaded from.

Ideally, I'd like to scroll through the history using the up/down arrows.

The problem with this is that if I've already loaded 10 files from a directory, I first have to pass through those ten files, all in the same directory, before I see a new directory where my file might be.

In the end, I often just type in the directory again or cut/paste it from an xterm.

in the find-file command, can I change the behavior of the up/down arrows to iterate over directories instead of files.

Alternatively, can I change the file order to match the order of buffers most recently visited instead of when I loaded the file?

like image 687
mmccoo Avatar asked Mar 03 '09 15:03

mmccoo


3 Answers

My first answer suffered from the behavior that TAB completion no longer worked as expected in 'find-file. But the technique still seems useful (and if you like it, preferable).

However, this solution has the same history behavior, but maintains the TAB completion as expected inside 'find-file.

I'd be interested to know if there were a way to avoid advising find-file, but I couldn't find any introspection that gave me the knowledge that 'find-file was called.

(defadvice find-file (around find-file-set-trigger-variable protect activate)
  "bind a variable so that history command can do special behavior for find-file"
  (interactive (let (inside-find-file-command) (find-file-read-args "Find file: " nil)))
  ad-do-it)

(defadvice next-history-element (around next-history-element-special-behavior-for-find-file protect activate)
  "when doing history for find-file, use the buffer-list as history"
  (if (boundp 'inside-find-file-command)
      (let ((find-file-history (delq nil (mapcar 'buffer-file-name (buffer-list))))
            (minibuffer-history-variable 'find-file-history))
        ad-do-it)
    ad-do-it))
like image 138
Trey Jackson Avatar answered Oct 25 '22 16:10

Trey Jackson


I suggest IDO. You can search in the buffer list or in find-file. When searching in find-file and it has no matches in the current folder it searches through history.

like image 31
user38509 Avatar answered Oct 25 '22 16:10

user38509


not what you want, but

have you tried (electric-buffer-list) Ctrl-x Ctrl-b?

or (dired)?

like image 1
Peter Miehle Avatar answered Oct 25 '22 15:10

Peter Miehle