2009-03-03 14 views
8

Wenn ich find-file aufrufen, um eine neue Datei zu öffnen, passiert es in der Regel, dass die gesuchte Datei in einem der Verzeichnisse liegt, aus denen ich bereits geladen habe.Kann ich Emacs Find-File History ändern?

Idealerweise möchte ich mit den Pfeilen nach oben/unten durch den Verlauf blättern.

Das Problem damit ist, dass, wenn ich bereits 10 Dateien aus einem Verzeichnis geladen habe, ich zuerst diese zehn Dateien, alle im selben Verzeichnis, durchlaufen muss, bevor ich ein neues Verzeichnis sehe, wo meine Datei sein könnte.

Am Ende gebe ich oft einfach das Verzeichnis wieder ein oder schneide es aus einem xterm heraus.

Im Befehl find-file kann ich das Verhalten der Pfeile nach oben/unten ändern, um Verzeichnisse anstelle von Dateien zu durchlaufen.

Kann ich die Dateireihenfolge auch so ändern, dass sie der Reihenfolge der zuletzt besuchten Puffer entspricht, anstatt die Datei zu laden?

+0

History-Browsing mit den Pfeiltasten funktioniert, nicht wahr?(Ich weiß, das Problem, das Sie haben, ist w/der Auftrag) –

Antwort

4

Meine erste Antwort aus dem Verhalten gelitten, dass TAB Fertigstellung nicht mehr wie erwartet arbeitete in ‚gefunden-Datei. Aber die Technik scheint immer noch nützlich (und wenn es Ihnen gefällt, vorzuziehen).

Diese Lösung hat jedoch das gleiche Verlaufsverhalten, behält aber die TAB-Vervollständigung wie erwartet in der 'find-Datei' bei.

Ich wäre interessiert zu wissen, ob es eine Möglichkeit gäbe, die Funddatei zu vermeiden, aber ich konnte keine Introspektion finden, die mir das Wissen gab, dass 'find-file' aufgerufen wurde.

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

Diese Lösung hat den unangenehmen Nebeneffekt, dass die Daunen und die Pfaue nicht komplementär sind, z. Wenn Sie mit der Pfeiltaste an der gewünschten Datei vorbeifahren, wird der Abwärts-Pfeil nicht gedrückt 1 in der Liste, die Sie gerade durchlaufen haben! – EoghanM

+0

Ich finde das nicht der Fall. Wenn ich im 'next-history-element' einen Haltepunkt festlege, sehe ich, dass er aufgerufen wird, wenn ich entweder die Aufwärts- oder die Abwärtspfeiltaste drücke. Vielleicht sind deine Schlüssel anders gebunden? –

+0

Ich glaube nicht, dass ich seltsame Tastaturbelegungen habe - wenn ich eine andere 'Vorgeschichte-Element'-Funktion erstelle, scheinen die Auf- und Ab-Pfeile die Inverse voneinander zu sein – EoghanM

1

nicht das, was Sie wollen, aber

haben Sie versucht (elektrisch-Puffer-Liste) Ctrl-x Ctrl-b?

oder (dired)?

1

Dies wird die Reihenfolge der Pufferliste für den Verlauf verwenden, was Sie wollen.

(setq read-file-name-function 'my-read-file-name) 
(defun my-read-file-name (prompt dir default-filename mustmatch initial predicate) 
    (let ((default-directory dir) 
     (files (directory-files dir)) 
     (history (delq nil (mapcar 'buffer-file-name (buffer-list))))) 
    (completing-read prompt files predicate mustmatch initial 'history))) 

Hmmm ... Das ändert sich das Verhalten der find-Datei des TAB Abschluss, da die TAB die Geschichte vervollständigt über (bereits geöffneten Dateien), und nicht über die Dateien in dem Verzeichnis Sie angeben.

beide bekommen zur gleichen Zeit zu arbeiten, ist ein bisschen schwieriger ...

4

Ich schlage vor, IDO. Sie können in der Pufferliste oder in der Find-Datei suchen. Wenn in der Find-Datei gesucht wird und keine Übereinstimmungen im aktuellen Ordner vorhanden sind, wird der Verlauf durchsucht.

Verwandte Themen