emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/hyperdrive 328635c1f9 07/30: Change: (hyperdrive-directory


From: ELPA Syncer
Subject: [nongnu] elpa/hyperdrive 328635c1f9 07/30: Change: (hyperdrive-directory-sort) Use column name as alist key
Date: Wed, 6 Sep 2023 18:59:42 -0400 (EDT)

branch: elpa/hyperdrive
commit 328635c1f9349f3b6e680b463cedc0dad3825762
Author: Joseph Turner <joseph@ushin.org>
Commit: Joseph Turner <joseph@ushin.org>

    Change: (hyperdrive-directory-sort) Use column name as alist key
    
    This removes the need to use cl-rassoc to get the description.
---
 hyperdrive-dir.el  | 22 +++++++++++-----------
 hyperdrive-lib.el  | 22 ++++++++++------------
 hyperdrive-vars.el | 24 ++++++++++++------------
 3 files changed, 33 insertions(+), 35 deletions(-)

diff --git a/hyperdrive-dir.el b/hyperdrive-dir.el
index 300819e861..342d6c6135 100644
--- a/hyperdrive-dir.el
+++ b/hyperdrive-dir.el
@@ -120,22 +120,22 @@ arguments."
   "Return column headers as a string with PREFIX.
 Columns are suffixed with up/down arrows according to
 `hyperdrive-sort-entries'."
-  (pcase-let* ((`(,accessor . ,direction) hyperdrive-directory-sort)
+  (pcase-let* ((`(,column . ,direction) hyperdrive-directory-sort)
                (arrow (if (eq direction :ascending) "▲" "▼"))
-               (size-header (propertize "Size" 'face 
'hyperdrive-column-header))
-               (mtime-header (propertize "Last Modified" 'face 
'hyperdrive-column-header))
-               (name-header (propertize "Name" 'face 
'hyperdrive-column-header)))
-    (pcase-exhaustive accessor
-      ('hyperdrive-entry-size (cl-callf2 concat arrow size-header))
-      ('hyperdrive-entry-mtime (cl-callf2 concat arrow mtime-header))
+               (size-header "Size")
+               (mtime-header "Last Modified")
+               (name-header "Name"))
+    (pcase-exhaustive column
+      ('size (cl-callf2 concat arrow size-header))
+      ('mtime (cl-callf2 concat arrow mtime-header))
       ;; Put the arrow second so that the header doesn't move.
-      ('hyperdrive-entry-name (cl-callf concat name-header arrow)))
+      ('name (cl-callf concat name-header arrow)))
     (concat prefix "\n"
             (format "%6s  %s  %s"
-                    size-header
+                    (propertize size-header 'face 'hyperdrive-column-header)
                     (format hyperdrive-timestamp-format-string
-                           mtime-header)
-                    name-header))))
+                           (propertize mtime-header 'face 
'hyperdrive-column-header))
+                    (propertize name-header 'face 
'hyperdrive-column-header)))))
 
 (defun hyperdrive-dir-pp (thing)
   "Pretty-print THING.
diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el
index 32a47a0618..1c689964a4 100644
--- a/hyperdrive-lib.el
+++ b/hyperdrive-lib.el
@@ -131,8 +131,9 @@ generated from PATH.  When ENCODE is non-nil, encode PATH."
 (cl-defun hyperdrive-sort-entries (entries &key (direction 
hyperdrive-directory-sort))
   "Return ENTRIES sorted by DIRECTION.
 See `hyperdrive-directory-sort' for the type of DIRECTION."
-  (pcase-let* ((`(,accessor . ,direction) direction)
-               ((map (direction sort-function)) (alist-get accessor 
hyperdrive-dir-sort-fields)))
+  (pcase-let* ((`(,column . ,direction) direction)
+               ((map (:accessor accessor) (direction sort-function))
+                (alist-get column hyperdrive-dir-sort-fields)))
     (cl-sort entries (lambda (a b)
                        (cond ((and a b) (funcall sort-function a b))
                              ;; When an entry lacks appropriate metadata
@@ -1037,20 +1038,17 @@ DEFAULT and INITIAL-INPUT are passed to `read-string' 
as-is."
 (defun hyperdrive-complete-sort ()
   "Return a value for `hyperdrive-directory-sort' selected with completion."
   (pcase-let* ((read-answer-short t)
-               (choices (mapcar (pcase-lambda (`(,_accessor . ,(map (:desc 
desc))))
-                                  (list desc (aref desc 0) (format "Sort by 
%s" desc)))
+               (choices (mapcar (lambda (field)
+                                  (let ((desc (symbol-name (car field))))
+                                    (list desc (aref desc 0) (format "Sort by 
%s" desc))))
                                 hyperdrive-dir-sort-fields))
-               (desc (read-answer "Sort by column: " choices))
-               (`(,accessor . ,(map (:ascending _ascending) (:descending 
_descending)))
-                (cl-rassoc desc hyperdrive-dir-sort-fields
-                           :test (lambda (desc fields-properties)
-                                   (equal desc (map-elt fields-properties 
:desc)))))
-               (`(,current-accessor . ,current-direction) 
hyperdrive-directory-sort)
-               (direction (if (and (eq accessor current-accessor)
+               (column (intern (read-answer "Sort by column: " choices)))
+               (`(,current-column . ,current-direction) 
hyperdrive-directory-sort)
+               (direction (if (and (eq column current-column)
                                    (eq current-direction :ascending))
                               :descending
                             :ascending)))
-    (cons accessor direction)))
+    (cons column direction)))
 
 (cl-defun hyperdrive-put-metadata (hyperdrive &key then)
   "Put HYPERDRIVE's metadata into the appropriate file, then call THEN."
diff --git a/hyperdrive-vars.el b/hyperdrive-vars.el
index a10170d548..413431dd74 100644
--- a/hyperdrive-vars.el
+++ b/hyperdrive-vars.el
@@ -94,23 +94,23 @@ Passed to `display-buffer', which see."
                  (const :tag "Pop up window" (display-buffer-pop-up-window))
                  (sexp :tag "Other")))
 
-(defcustom hyperdrive-directory-sort '(hyperdrive-entry-name . :ascending)
+(defcustom hyperdrive-directory-sort '(name . :ascending)
+  ;; TODO(doc): Document change.
   "Column by which directory entries are sorted.
-Internally, a cons cell of (KEY . PREDICATE), the KEY being the
-`hyperdrive-entry' accessor function and the PREDICATE being the
-appropriate function (e.g. `time-less-p' for
-`hyperdrive-entry-mtime', `<' for `hyperdrive-entry-size',
-etc)."
+Internally, a cons cell of (COLUMN . DIRECTION), the COLUMn being
+one of the directory listing columns (\\+`name', \\+`size', or
+\\+`mtime') and DIRECTION being one of \\+`:ascending' or
+\\+`:descending'."
   ;; TODO: Consolidate type
-  :type '(radio (cons :tag "By name" (const :format "" hyperdrive-entry-name)
+  :type '(radio (cons :tag "By name" (const :format "" name)
                       (choice :tag "Direction" :value :ascending
                               (const :tag "Ascending" :ascending)
                               (const :tag "Descending" :descending)))
-                (cons :tag "By size" (const :format "" hyperdrive-entry-size)
+                (cons :tag "By size" (const :format "" size)
                       (choice :tag "Direction" :value :ascending
                               (const :tag "Ascending" :ascending)
                               (const :tag "Descending" :descending)))
-                (cons :tag "By date" (const :format "" hyperdrive-entry-mtime)
+                (cons :tag "By date" (const :format "" mtime)
                       (choice :tag "Direction" :value :ascending
                               (const :tag "Ascending" :ascending)
                               (const :tag "Descending" :descending)))))
@@ -292,9 +292,9 @@ values are alists mapping version range starts to plists 
with
 Keys are regexps matched against MIME types.")
 
 (defvar hyperdrive-dir-sort-fields
-  '((hyperdrive-entry-name  :desc "name"  :ascending string<     :descending 
string>)
-    (hyperdrive-entry-size  :desc "size"  :ascending <           :descending >)
-    (hyperdrive-entry-mtime :desc "mtime" :ascending time-less-p :descending 
hyperdrive-time-greater-p))
+  '((name  :accessor hyperdrive-entry-name  :ascending string<     :descending 
string>)
+    (size  :accessor hyperdrive-entry-size  :ascending <           :descending 
>)
+    (mtime :accessor hyperdrive-entry-mtime :ascending time-less-p :descending 
hyperdrive-time-greater-p))
   "Fields for sorting hyperdrive directory buffer columns.")
 
 ;;;; Footer



reply via email to

[Prev in Thread] Current Thread [Next in Thread]