Geben Sie anstelle des Verzeichnisnamens eine Liste von Zeichenfolgen als (erstes) Argument an, das funktioniert dired
.
Das erste Element in der Liste ist der Name des Dired-Puffers.
Die anderen Elemente in der Liste sind Verzeichnis- oder Dateinamen.
Der resultierende Dired-Puffer hat für jedes Element in der Liste eine Zeile.
Jedes aufgeführte Verzeichnis kann natürlich eingefügt werden (dh zu seiner Dateiliste erweitert werden), indem i
es im Dired-Puffer verwendet wird.
Bewerten Sie dies beispielsweise:
(dired-other-window '("my dired buffer" DIR1 FILE1 DIR2 FILE2 FILE3))
Dabei DIRN
sind dies die Verzeichnisnamen (Zeichenfolgen) und die FILEN
Dateinamen (Zeichenfolgen). Sie können absolute Namen oder Namen relativ zum aktuellen Wert von verwenden default-directory
.
Das Ergebnis ist hier Dired Puffer my dired buffer
, mit Linien für Verzeichnisse DIR1
und DIR2
und Dateien FILE1
, FILE2
und FILE3
.
Ich bin mir nicht sicher, ob ich dem Rest Ihrer Frage folge. Der daraus resultierende Dired-Puffer ist jedoch ein normaler Dired-Puffer. Sie können wdired
damit Änderungen usw. zulassen.
Update Nr. 1 nach Ihrem Kommentar -
Guter Punkt. Ja, Dired's i
( dired-maybe-insert-subdir
) setzt voraus, dass alle eingefügten Unterverzeichnisse derselben Verzeichnisstruktur angehören. Ich weiß nicht warum. Vielleicht hängt ein Teil des Codes (und es gibt eine Menge davon zu berücksichtigen), der möglicherweise den Umgang damit betrifft ls
, davon ab. Oder vielleicht ist es eine Einschränkung, die nicht wirklich notwendig ist.
Eine Möglichkeit, mit dieser Einschränkung umzugehen, besteht darin, bei einem gemeinsamen Vorfahrverzeichnis für alle Unterverzeichnisse zu beginnen, die Sie in die Liste aufnehmen. IOW starten, indem Sie M-x cd
mit diesem gemeinsamen Vorfahren Verzeichnis, bevor Sie Ihren Dired Puffer zu schaffen. Im Extremfall würde dies M-x cd
das Stammverzeichnis bedeuten . Das wird auf jeden Fall funktionieren. Sie müssen wahrscheinlich absolute Dateinamen für die Verzeichnisse und Dateien verwenden, an die Sie dired
die Auflistung übergeben.
Aber wie Sie sagen, wenn Sie MS Windows verwenden und sich die Verzeichnisse auf unterschiedlichen Laufwerksbuchstaben befinden, ist dies keine Lösung.
Unten ist eine andere Sache, die Sie ausprobieren können. Weiß nicht, ob es woanders Probleme geben könnte. (Ich würde gerne wissen, auf welche Probleme Sie stoßen, falls dies der Fall ist. dired+.el
Informationen zum Kontakt finden Sie im Dateiheader der Bibliothek .)
Kopieren Sie den Quellcode für diese beiden Funktionen aus file dired-aux.el
: dired-insert-subdir
und dired-insert-subdir-newpos
, und ändern Sie die Kopien wie folgt:
Für
dired-insert-subdir
, kommentieren Sie diese Zeile aus:(dired-insert-subdir-validate dirname switches)
Für
dired-insert-subdir-newpos
Ändern Sie dazu den Code:(defun dired-insert-subdir-newpos (new-dir) ;; Find pos for new subdir, according to tree order. (let ((alist dired-subdir-alist) elt dir new-pos) (while alist (setq elt (car alist) alist (cdr alist) dir (car elt)) (if (dired-tree-lessp dir new-dir) ;; Insert NEW-DIR after DIR (setq new-pos (dired-get-subdir-max elt) alist ()) (setq new-pos (point-max)))) (goto-char new-pos)) ;; want a separating newline between subdirs (unless (eobp) (forward-line -1)) (insert "\n") (point))
Laden Sie dann Ihren modifizierten Code, nachdem Sie den Vanilla Dired-Code geladen haben, und ersetzen Sie die ursprünglichen Funktionen. (Alternativ können Sie diese Funktionen beraten.)
Dies scheint zu bewirken, dass die Dinge wie erwartet funktionieren und es nicht erforderlich ist, von einem gemeinsamen Ahnenverzeichnis auszugehen. Aber wie gesagt, ich weiß nicht, ob einige andere Teile des Dired-Codes (oder des Wdired-Codes) durch eine solche Änderung gestört werden könnten. Experimentiere einfach ein bisschen.
Beachten Sie jedoch, dass dired-insert-subdir-validate
tatsächlich zwei Dinge geprüft werden, von denen nur eines entfernt werden sollte (?). Neben der Überprüfung, ob das einzufügende Unterverzeichnis in derselben Verzeichnisstruktur liegt, wird geprüft, ob die entsprechenden ls
Schalter mit denen der Gesamtauflistung kompatibel sind. Ich habe kein Problem mit dem Entfernen dired-insert-subdir-validate
insgesamt festgestellt, aber wenn diese Überprüfung wirklich wichtig ist, können Sie einfach versuchen, diesen Teil des dired-insert-subdir-validate
Codes zu entfernen, der den Verzeichnisbaum prüft:
(or (dired-in-this-tree dirname (expand-file-name default-directory)) (error "%s: not in this directory tree" dirname))
Wenn es den Anschein hat, dass solche Codeänderungen keine unerwünschten Nebenwirkungen haben, die nicht einfach behoben werden können, werde ich in Erwägung ziehen, sie zu Dired + hinzuzufügen .
Danke, dass Sie mich darauf aufmerksam gemacht haben. Ich schätze, ich erstelle solche Listen normalerweise von einem gemeinsamen Vorfahren, daher ist mir diese Einschränkung bisher nicht aufgefallen.
Übrigens - Ich habe bei Emacs "Fehler" # 18421 für diese Erweiterungsanfrage eingereicht: Lassen Sie Dired Verzeichnislisten aufnehmen, die nicht aus demselben Baum stammen.
* UPDATE # 2 *
Ich habe diese Funktion zu Dired + hinzugefügt .
Ich habe die Definitionen von C-x d
( dired
), C-x 4 d
( dired-other-window
) und C-x 5 d
( dired-other-frame
) so geändert, dass Sie bei Verwendung eines nicht positiven Präfix arg (z. B. C-- C-x d
) aufgefordert werden, (1) den Dired-Puffernamen anzugeben (beliebiger Name, nicht unbedingt ein Verzeichnis) Name) und (2) die einzelnen Dateien oder Verzeichnisse, die aufgelistet werden sollen.
Ein nicht negatives Präfix arg fordert Sie weiterhin auf, die ls
Switches zu verwenden. (Also C-0
beides: Eingabeaufforderungen für Schalter, Puffername und Dateien, die aufgelistet werden sollen.)
Ich habe i
( dired-maybe-insert-subdir
) so eingestellt, dass es mit beliebigen Verzeichnissen funktioniert. Sie können natürlich immer noch ein Präfix arg verwenden i
, um verschiedene ls
Schalter anzugeben, die für die eingefügte Unterverzeichnisliste verwendet werden sollen.