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

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

[elpa] externals/denote e6a4bac215 13/19: Reinstate macro in denote-sort


From: ELPA Syncer
Subject: [elpa] externals/denote e6a4bac215 13/19: Reinstate macro in denote-sort.el
Date: Sat, 2 Dec 2023 03:57:53 -0500 (EST)

branch: externals/denote
commit e6a4bac215d4242531e7699d92163e73e4978897
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    Reinstate macro in denote-sort.el
    
    All 'denote-retrieve-filename-*' functions now do the same thing,
    while the sorting algorithm is refined to account for empty strings.
    See commits a44600b, b13d899.
---
 denote-sort.el | 59 +++++++++++++++++++---------------------------------------
 1 file changed, 19 insertions(+), 40 deletions(-)

diff --git a/denote-sort.el b/denote-sort.el
index 756ccb8c73..413173dfbf 100644
--- a/denote-sort.el
+++ b/denote-sort.el
@@ -48,48 +48,27 @@
 (defvar denote-sort-components '(title keywords signature identifier)
   "List of sorting keys applicable for `denote-sort-files' and related.")
 
-(defun denote-sort-title-lessp (file1 file2)
-  "Return smallest between FILE1 and FILE2 based on their title.
+(defmacro denote-sort--define-lessp (component)
+  "Define function to sort by COMPONENT."
+  (let ((retrieve-fn (intern (format "denote-retrieve-filename-%s" 
component))))
+    `(defun ,(intern (format "denote-sort-%s-lessp" component)) (file1 file2)
+       ,(format
+         "Return smallest between FILE1 and FILE2 based on their %s.
 The comparison is done with `denote-sort-comparison-function' between the
 two title values."
-  (let ((one (denote-retrieve-filename-title file1))
-        (two (denote-retrieve-filename-title file2)))
-    (cond
-     ((string= one (file-name-sans-extension file1))
-      file2)
-     ((or (string= two (file-name-sans-extension file2))
-          (funcall denote-sort-comparison-function one two))
-      file1)
-     (t nil))))
-
-(defun denote-sort-keywords-lessp (file1 file2)
-  "Return smallest between FILE1 and FILE2 based on their keywords.
-The comparison is done with `denote-sort-comparison-function' between the
-two keywords values."
-  (let ((one (denote-retrieve-filename-keywords file1))
-        (two (denote-retrieve-filename-keywords file2)))
-    (cond
-     ((and (string-empty-p one) (not (string-empty-p two))) file2)
-     ((or (and (not (string-empty-p one)) (string-empty-p two))
-          (funcall denote-sort-comparison-function one two))
-      file1)
-     (t nil))))
-
-(defun denote-sort-signature-lessp (file1 file2)
-  "Return smallest between FILE1 and FILE2 based on their signature.
-The comparison is done with `denote-sort-comparison-function' between the
-two signature values."
-  (let* ((one (denote-retrieve-filename-signature file1))
-         (two (denote-retrieve-filename-signature file2))
-         (one-empty-p (string-empty-p one))
-         (two-empty-p (string-empty-p two)))
-    (cond
-     (one-empty-p
-      nil)
-     ((and (not one-empty-p) two-empty-p)
-      one)
-     (t
-      (funcall denote-sort-comparison-function one two)))))
+         component)
+       (let* ((one (,retrieve-fn file1))
+              (two (,retrieve-fn  file2))
+              (one-empty-p (string-empty-p one))
+              (two-empty-p (string-empty-p two)))
+         (cond
+          (one-empty-p nil)
+          ((and (not one-empty-p) two-empty-p) one)
+          (t (funcall denote-sort-comparison-function one two)))))))
+
+(denote-sort--define-lessp title)
+(denote-sort--define-lessp keywords)
+(denote-sort--define-lessp signature)
 
 ;;;###autoload
 (defun denote-sort-files (files component &optional reverse)



reply via email to

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