似乎dired不提供根据任意比较器功能对文件/文件夹进行排序的接口。 (默认情况下,它只允许按名称和日期排序)。
我一直在深入研究源代码以确定此排序的机制,我发现(revert-buffer)
(dired-sort-toggle
)中dired.el
的调用是重新播放。这让我意识到dired只是用某些开关运行一个ls命令,然后将输出读入缓冲区。
有没有更好的方法来实现这种自定义排序,而不是将dired的ls函数指向自定义排序?我觉得可能有一个变量,它保存了dired缓冲区中有序的文件/目录列表,我可以重新安排它。
我找到了变量dired-subdir-alist
,但这似乎只包含顶级目录(即使根据文档,这看起来就像我想要的列表)
dired-subdir-alist是`dired.el'中定义的变量。 文档:子目录及其缓冲区的关联列表 位置。每个子目录都有一个元素:(DIRNAME.STARTMARKER)。 元素的顺序与缓冲区中的顺序相反。在 简单的情况,这个列表包含一个元素。
我怎么能找到这样的变量?
答案 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)
调整代码以便能够使用自己的排序功能应该很容易。