Sorting 根据自定义比较器对emacs dired缓冲区进行排序
dired似乎没有提供一个接口来根据任意比较器函数对文件/文件夹进行排序。(默认情况下,它只允许按名称和日期排序) 我一直在深入研究源代码,以确定此排序的机制,我发现是调用Sorting 根据自定义比较器对emacs dired缓冲区进行排序,sorting,emacs,elisp,dired,Sorting,Emacs,Elisp,Dired,dired似乎没有提供一个接口来根据任意比较器函数对文件/文件夹进行排序。(默认情况下,它只允许按名称和日期排序) 我一直在深入研究源代码,以确定此排序的机制,我发现是调用dired sort toggle(在dired.el)中的(还原缓冲区))进行重新显示。这使我意识到dired只是使用某些开关运行ls命令,然后将输出读入缓冲区 有没有比将dired的ls函数指向自定义排序更好的方法来实现这种自定义排序?我觉得可能有一个变量在dired缓冲区中保存文件/目录的有序列表,我可能会重新排列它 我
dired sort toggle
(在dired.el
)中的(还原缓冲区)
)进行重新显示。这使我意识到dired只是使用某些开关运行ls命令,然后将输出读入缓冲区
有没有比将dired的ls函数指向自定义排序更好的方法来实现这种自定义排序?我觉得可能有一个变量在dired缓冲区中保存文件/目录的有序列表,我可能会重新排列它
我找到了变量dired subdir list
,但它似乎只包含顶级目录(尽管根据文档,这似乎正是我想要的列表)
dired subdir list是在“dired.el”中定义的变量。
文档:子目录及其缓冲区的关联列表
位置。每个子目录都有一个元素:(DIRNAME.STARTMARKER)。
元素的顺序与缓冲区中的顺序相反。在里面
简单情况下,此列表包含一个元素
如何找到这样的变量?您可能想使用ls-lisp,它是
插入目录
的Elisp实现,这是Dired(通常)运行ls所使用的函数。这通常在通常不存在ls
的窗口下使用:
(require 'ls-lisp)
调整代码以使用您自己的排序功能应该很容易。您的理解是正确的。正如@Stefan所指出的,
ls lisp.el
提供了一些灵活性
另请参见库,它至少提供了更多的
ls
可能性,并允许您组合排序顺序。(但是,它不允许您提供任意的排序顺序——为此,请参见ls lisp.el
)我将对此进行研究。我最终发现,正是这个insert directory
函数真正负责文件和目录的顺序。