以编程方式将文件插入Dired缓冲区


10

我有一个文件名列表(具有完整路径),我想创建一个Dired缓冲区,列出这组文件。我将如何去做?

如何从文件名列表创建Dired缓冲区?

无需使用外部依赖项。


请说清楚。列表中的字符串是a)您要创建的文件的名称,还是b)文件的内容(您具有绝对路径的东西)?

@Dan具有绝对路径的文件名列表。只是文件名。
Tu Do

1
如果我对您的理解正确,则可以使用(find-file your-directory-path)来获取相关的dired缓冲区(例如,(find-file "/tmp/")tmpdired缓冲区中打开目录)。

1
我已根据您在这些评论中所说的内容编辑了您的问题。如果我弄错了,请随时回滚。
Malabarba

3
如果您想用elisp来询问文件对象,那是一个完全不同的问题,答案很短:没有。:-)
马拉巴巴

Answers:


20

C-h f dired告诉你答案。只需传递给dired作为DIRNAME参数的列表,该列表具有您想要的Dired缓冲区名称(任何字符串)作为其汽车,并作为cdr想要在缓冲区中列出的文件名列表。通常,您要使用绝对文件名。例如:

(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

根据您的平台,您输入的所有不存在的文件和目录的名称可能会被忽略(未列出),或者会引发错误。如果您使用前者ls-lisp.el(例如MS Windows),则会发生前者。您可以强制使用ls-lisp任何平台上,如果你喜欢(但ls-lisp具有较少的ls选项),这样做:

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

如果使用库Dired +dired+.el),则可以交互地选择要列出的文件和目录:只需提供dired一个非正数前缀参数(即<= 0)。然后反复提示您输入要列出的目录和文件名。您可以使用文件名通配符(即*用于通配符)来包含匹配的文件和目录。使用C-g结束输入。

换句话说,Dired缓冲区可以列出任意数量的目录和文件名,甚至可以属于不同的目录树,而不是列出单个目录。

(非负前缀arg(即> = 0)会提示您输入ls列表开关。因此,零前缀arg会提示您输入要列出的开关和文件/目录:首先是ls开关,然后是文件/目录。)


好吧,我想在Elisp中做到这一点,而不是使用命令。我只想要一个简单的代码片段,即可将文件名(具有完整路径)转换为Dired缓冲区中的条目,类似于(insert ...)将文本插入缓冲区中的方式。
Tu Do

1
@tudo:dired是一个elisp函数。只需对此进行评估:(dired '("my-list" "/home/rekado/dev/script.scm" "/home/rekado/another-file"))正如@Drew所写,您将获得一个包含这些文件的干燥缓冲区。
rekado 2014年

@rekado谢谢 现在,我正确地重读了答案,就像您说的那样。我只想看一个像您一样的Elisp代码段,我以为Drew在瞥见它时给了我一个用户命令答案。
Tu Do

@Drew请添加rekado的示例。感谢您的回答。
Tu Do

最初,当我看到文件集时,我并不认为会这么简单。我认为我们必须使Dired能够识别适当的文件对象才能正常工作。
Tu Do

2

当文件列表位于缓冲区中(每行一个文件)时,这是执行此操作的命令。

(defun dired-virtual-vanilla ()
  (interactive)
  (dired (cons "*Dired*" (split-string (buffer-string) "\n" t))))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.