Emacs——显示修改日期、大小、权限等的树形视图库

Emacs——显示修改日期、大小、权限等的树形视图库

我已经修改了 ztree-mode,以提供具有一些 dired-mode 功能的树形视图 - 例如,标记、取消标记、ztree-get-marked-files上级目录、复制、重命名/移动、删除、按名称排序和按修改日期排序。我希望将主要模式提升到下一步,即包含一些附加信息 - 例如修改日期、大小(人类可读 - 例如 kb、MB、GB)、权限等。但是,我还没有找到一个类似的库来获取一些想法。是否有任何树形视图库可以提供其中一些文件属性详细信息的视觉显示?

本质上,我将使用返回的数据(directory-files-and-attributes DIRECTORY t nil t)并根据列表提供的附加详细信息来组织树视图。

答案1

目前似乎没有任何公开的 Emacs 树视图库提供此功能。

因此,我将自己创建这样的功能。以下函数可用于获取文件名、大小、日期和权限的自定义列表。该函数file-size-human-readable可能在早期版本的 Emacs 中不可用,但在 Emacs Trunk 中可用。ls-lisp-format-file-size中的函数ls-lisp是一种替代方法,但它会产生带有前导空格的结果——我选择不使用它,而不是摆弄它。不是必需message的,但有助于查看自定义列表的样子——仅用于演示目的。

(defun random-sort--filename-size-date-permissions ()
"Return a custom list (sorted randomly):
  absolute name, size, date and permissions."
  (let* (
      (directory "~/")
      (master (directory-files-and-attributes directory t nil t nil))
      (custom-list (mapcar (lambda (x)
        (list
          (nth 0 x) ;; filename
          (file-size-human-readable (nth 8 x)) ;; size
          (format-time-string "%m-%d-%Y %R" (nth 6 x)) ;; date
          (nth 9 x) )) ;; permissions
        master)) )
    (dolist (x custom-list)
      (message "%s" x))
    custom-list))

(defun date-sort--filename-size-date-permissions ()
"Return a custom list (sorted by date -- newest first):
  absolute name, size, date and permissions."
  (let* (
      (directory "~/")
      (random-master (directory-files-and-attributes directory t nil t nil))
      (date-sort--master (sort random-master
        #'(lambda (x y) (time-less-p (nth 6 y) (nth 6 x)))))
      (custom-list (mapcar (lambda (x)
        (list
          (nth 0 x) ;; filename
          (file-size-human-readable (nth 8 x)) ;; size
          (format-time-string "%m-%d-%Y %R" (nth 6 x)) ;; date
          (nth 9 x) )) ;; permissions
        date-sort--master)) )
    (dolist (x custom-list)
      (message "%s" x))
    custom-list))

(defun alpha-sort--filename-size-date-permissions ()
"Return a custom list (sorted alphabetically):
  absolute name, size, date and permissions."
  (let* (
      (directory "~/")
      (alpha-sort--master (directory-files-and-attributes directory t nil nil nil))
      (custom-list (mapcar (lambda (x)
        (list
          (nth 0 x) ;; filename
          (file-size-human-readable (nth 8 x)) ;; size
          (format-time-string "%m-%d-%Y %R" (nth 6 x)) ;; date
          (nth 9 x) )) ;; permissions
        alpha-sort--master)) )
    (dolist (x custom-list)
      (message "%s" x))
    custom-list))

按名称分类使用函数的稍微变化alpha-sort--filename-size-date-permissions,并采用自定义修改版本ztree-mode

例子


按日期排序使用函数的稍微变化date-sort--filename-size-date-permissions,并采用自定义修改版本ztree-mode

例子

相关内容