【问题标题】:Sort emacs dired buffer according to custom comparator根据自定义比较器对 emacs dired 缓冲区进行排序
【发布时间】:2013-09-13 11:00:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: sorting emacs elisp dired


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      (require 'ls-lisp)
      

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

      【讨论】:

      • 我会调查的。我最终确实找到了真正负责文件和目录顺序的函数是 insert-directory
      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2020-07-11
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多