2

dired 似乎没有提供一个接口来根据任意比较器函数对文件/文件夹进行排序。(默认情况下,它只允许按名称和日期排序)。

为了确定这种排序的机制,我一直在深入研究源代码,我发现是对(revert-buffer)in dired-sort-toggle(in dired.el) 的调用进行了重新显示。这让我意识到 dired 只是运行带有某些开关的 ls 命令,然后将输出读入缓冲区。

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

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

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

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

4

2 回答 2

2

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

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

于 2013-09-13T21:37:20.937 回答
1

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

(require 'ls-lisp)

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

于 2013-09-13T12:59:28.190 回答