根据自定义比较器对emacs dired buffer进行排序

时间:2013-09-13 11:00:20

标签: sorting emacs elisp dired

似乎dired不提供根据任意比较器功能对文件/文件夹进行排序的接口。 (默认情况下,它只允许按名称和日期排序)。

我一直在深入研究源代码以确定此排序的机制,我发现(revert-buffer)dired-sort-toggle)中dired.el的调用是重新播放。这让我意识到dired只是用某些开关运行一个ls命令,然后将输出读入缓冲区。

有没有更好的方法来实现这种自定义排序,而不是将dired的ls函数指向自定义排序?我觉得可能有一个变量,它保存了dired缓冲区中有序的文件/目录列表,我可以重新安排它。

我找到了变量dired-subdir-alist,但这似乎只包含顶级目录(即使根据文档,这看起来就像我想要的列表)

  

dired-subdir-alist是`dired.el'中定义的变量。   文档:子目录及其缓冲区的关联列表   位置。每个子目录都有一个元素:(DIRNAME.STARTMARKER)。   元素的顺序与缓冲区中的顺序相反。在   简单的情况,这个列表包含一个元素。

我怎么能找到这样的变量?

2 个答案:

答案 0 :(得分:2)

您的理解是正确的。而且,正如@Stefan所说,ls-lisp.el提供了一些灵活性。

另请参见库Dired Sort Menu,它至少提供了更多ls种可能性,并允许您组合排序顺序。 (但是,它不允许您提供任意排序顺序 - 为此,请参阅ls-lisp.el。)

答案 1 :(得分:1)

您可能希望使用ls-lisp,它是insert-directory的Elisp实现,它是Dired用于(通常)运行ls的函数。这通常在Windows下使用,ls通常不存在:

(require 'ls-lisp)

调整代码以便能够使用自己的排序功能应该很容易。