Insérer des fichiers par programme dans le tampon Dired

10

J'ai une liste de noms de fichiers (avec chemin d'accès complet) et je veux créer un tampon Dired répertoriant cet ensemble de fichiers. Comment pourrais-je procéder?

Comment créer un tampon Dired à partir d'une liste de noms de fichiers?

Sans utiliser de dépendances externes.

Tu Do
la source
Précisez s'il vous plaît. Les chaînes de votre liste sont-elles a) les noms des fichiers que vous souhaitez créer, ou b) le contenu du fichier (la chose pour laquelle vous avez un chemin absolu)?
Dan
@Dan Une liste de noms de fichiers avec des chemins absolus. Juste les noms de fichiers.
Tu Do
1
Si je vous comprends bien, vous pouvez simplement utiliser (find-file your-directory-path)pour obtenir le diredtampon approprié (par exemple, (find-file "/tmp/")ouvrira votre tmprépertoire dans un diredtampon).
Dan
1
J'ai modifié votre question en fonction de ce que vous avez dit dans ces commentaires. N'hésitez pas à revenir en arrière si je me trompe.
Malabarba
3
Si vous voulez poser des questions sur les objets fichier dans elisp, c'est une question entièrement différente, avec une réponse très courte: il n'y en a pas. :-)
Malabarba

Réponses:

20

C-h f diredvous dit la réponse. Passez simplement dired, comme DIRNAMEargument, une liste qui a pour voiture le nom du tampon Dired que vous voulez (n'importe quelle chaîne) et comme cdr la liste des noms de fichiers que vous voulez lister dans le tampon. En règle générale, vous souhaitez utiliser des noms de fichiers absolus. Par exemple:

(dired (list "My Dired Buffer Name*"     ; The Dired buffer name
             "/usr/foo/file1.el"         ; First file
             "/usr/bar/toto/some-file.c" ; Second file
             "/whatever/directory/"      ; Third is a directory
             "/a/file/somewhere.zzz"))   ; Fourth

Selon votre plate-forme, les noms des fichiers et répertoires inexistants que vous entrez peuvent être ignorés (non répertoriés) ou générer une erreur. Le premier se produit si vous utilisez ls-lisp.el(par exemple MS Windows). Vous pouvez forcer l'utilisation de ls-lispsur n'importe quelle plate-forme, si vous le souhaitez (mais ls-lispavec moins d' lsoptions), en procédant comme suit:

(setq ls-lisp-use-insert-directory-program nil)
(require 'ls-lisp)

Si vous utilisez la bibliothèque Dired + ( dired+.el), vous pouvez alors choisir interactivement les fichiers et répertoires à lister: donnez simplement diredun argument de préfixe non positif (c'est-à-dire <= 0). Vous êtes ensuite invité à plusieurs reprises pour les répertoires et les noms de fichiers que vous souhaitez répertorié. Vous pouvez utiliser des caractères génériques de nom de fichier (c'est-à-dire *pour la globalisation) pour inclure les fichiers et répertoires correspondants. Utilisez C-gpour terminer la saisie.

En d'autres termes, au lieu de répertorier un seul répertoire, le tampon Dired peut répertorier un nombre illimité de répertoires et de noms de fichiers, qui peuvent même appartenir à différentes arborescences de répertoires.

(Un argument de préfixe non négatif (c'est-à-dire> = 0) vous invite à lslister les commutateurs. Ainsi, un argument de préfixe zéro vous invite à indiquer à la fois les commutateurs et les fichiers / répertoires: d'abord les lscommutateurs, puis les fichiers / répertoires.)

A dessiné
la source
Eh bien, je veux le faire dans Elisp, sans utiliser la commande. Je veux juste un simple extrait de code qui transforme un nom de fichier (avec le chemin complet) en une entrée dans le tampon Dired, similaire à la façon dont j'utilise (insert ...)pour insérer du texte dans un tampon.
Tu Do
1
@tudo: diredest une fonction elisp. (dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))Évaluez simplement ceci: et vous obtenez un tampon dired contenant ces fichiers comme l'a écrit @Drew.
rekado
@rekado .Merci. Maintenant, j'ai relu correctement la réponse, c'est comme ce que vous avez dit. Je veux juste voir un extrait de code Elisp comme le vôtre, et j'ai pensé que Drew m'a donné une réponse de commande utilisateur lorsque je l'ai entrevu.
Tu Do
@Drew Veuillez ajouter l'exemple de rekado. Merci pour votre réponse.
Tu Do
Au début, je ne pensais pas que ce serait aussi simple, quand je vois des ensembles de fichiers . Je pensais que nous devons faire reconnaître à Dired les objets fichier appropriés pour que cela fonctionne correctement.
Tu Do
2

Voici une commande pour le faire lorsque la liste des fichiers est dans un tampon, avec un fichier par ligne.

(defun dired-virtual-vanilla ()
  (interactive)
  (dired (cons "*Dired*" (split-string (buffer-string) "\n" t))))
killdash9
la source