如何创建列出所有打开文件的干缓冲区?


9

我有一种将项目从dired缓冲区刻录到光盘的机制。不幸的是,我修补的文件散布在文件系统中。如何dired从所有打开的文件创建缓冲区?



@Drew我认为不是重复,至少不是严格意义上的。这个问题将简单地变成“如何获取绑定到文件的所有打开缓冲区的列表?”。
肖恩·艾瑞德

@Drew特别指出:(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
Sean Allred

添加的信息是buffer-list存在的(我确实知道),并且在没有文件时buffer-file-name返回nil(我不知道)。建议的副本不包含此信息或有任何必要。
肖恩·艾瑞德

1
@Drew根据我的经验,尝试使每个问题尽可能模块化,这是不利的,而不是优势。对于那些偶然发现谷歌的人来说,它的实用性降低了,他们永远不会因为他们谷歌的用例而进行注册。如果我想遍历TeX.SE上的每个问题以及具有相同概念性答案的重复问题,那么节制将成为一场噩梦,网站将陷入黑暗。
肖恩·艾瑞德

Answers:


12

dired命令接受文件名列表作为参数。只需创建一个并传递给它:

(dired
 (cons
  "Open Files"
  (sort (remove nil (mapcar #'buffer-file-name (buffer-list)))
       #'string<))) 

我认为这会遗漏一个文件:当您传递一个列表来清空该列表中的第一个元素时,会将其作为目录名,其余的作为文件。怎么样:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas

请注意:如果存在尚未与文件关联的文件关联缓冲区,这将出错。
肖恩·艾瑞德

1

只需提供字符串列表,即可使用dired函数,例如:

(dired '("custom dired" ".emacs.d/init.el" "mydotfiles/.bashrc"))

编辑

@Malabarba的答案是最好的方法。

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.