-1

Я изменил ztree-mode, чтобы обеспечить древовидное представление с некоторыми функциями dired-mode - например, пометить, снять отметку, ztree-get-marked-files , up-directory, копировать, переименовать / переместить, удалить, отсортировать по имени и сортировать по дате изменения. Я хочу перейти в основной режим к следующему шагу, который включает некоторую дополнительную информацию - например, дату изменения, размер (удобочитаемый для человека - например, КБ, МБ, ГБ), разрешения и т.д. Тем не менее, я не нашел сопоставимой библиотеки, из которой можно было бы получить некоторые идеи. Существуют ли какие-либо древовидные библиотеки, которые предлагают визуальное отображение некоторых из этих атрибутов файла?

По сути, я буду использовать данные, возвращаемые из (directory-files-and-attributes DIRECTORY t nil t) и организовывать древовидное представление на основе дополнительных деталей, которые предлагает список.

1 ответ1

0

Похоже, что нет общедоступных библиотек древовидной структуры 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:

пример

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .