Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 根据自定义比较器对emacs dired缓冲区进行排序_Sorting_Emacs_Elisp_Dired - Fatal编程技术网

Sorting 根据自定义比较器对emacs dired缓冲区进行排序

Sorting 根据自定义比较器对emacs dired缓冲区进行排序,sorting,emacs,elisp,dired,Sorting,Emacs,Elisp,Dired,dired似乎没有提供一个接口来根据任意比较器函数对文件/文件夹进行排序。(默认情况下,它只允许按名称和日期排序) 我一直在深入研究源代码,以确定此排序的机制,我发现是调用dired sort toggle(在dired.el)中的(还原缓冲区))进行重新显示。这使我意识到dired只是使用某些开关运行ls命令,然后将输出读入缓冲区 有没有比将dired的ls函数指向自定义排序更好的方法来实现这种自定义排序?我觉得可能有一个变量在dired缓冲区中保存文件/目录的有序列表,我可能会重新排列它 我

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
函数真正负责文件和目录的顺序。