aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sx-question-list.el10
-rw-r--r--sx.el24
2 files changed, 22 insertions, 12 deletions
diff --git a/sx-question-list.el b/sx-question-list.el
index 1b7fe5a..5909156 100644
--- a/sx-question-list.el
+++ b/sx-question-list.el
@@ -322,11 +322,11 @@ into consideration.
;; Add a setter to protect the value.
:group 'sx-question-list)
-(defun sx-question-list--date-more-recent-p (x y)
- "Non-nil if tabulated-entry X is newer than Y."
- (sx--<
- sx-question-list-date-sort-method
- (car x) (car y) #'>))
+(sx--create-comparator sx-question-list--date-more-recent-p
+ "Non-nil if tabulated-entry A is newer than B."
+ > (lambda (x)
+ (cdr (assoc sx-question-list-date-sort-method
+ (car x)))))
;;; Keybinds
diff --git a/sx.el b/sx.el
index e080271..87907de 100644
--- a/sx.el
+++ b/sx.el
@@ -259,6 +259,23 @@ whenever BODY evaluates to nil."
:filter (lambda (&optional _)
(when (progn ,@body) ,def)))))
+(defmacro sx--create-comparator (name doc compare-func get-func)
+ "Define a new comparator called NAME with documentation DOC.
+COMPARE-FUNC is a function that takes the return value of
+GET-FUNC and performs the actual comparison."
+ (declare (indent 1) (doc-string 2))
+ (let ((gpf (intern (format " %S--get-prop-function" name)))
+ (cf (intern (format " %S--compare-function" name))))
+ ;; Leading space to hide from completion systems
+ `(progn
+ ;; In using `defalias', the macro supports both function
+ ;; symbols and lambda expressions.
+ (defalias ',gpf ,get-func)
+ (defalias ',cf ,compare-func)
+ (defun ,name (a b)
+ ,doc
+ (,cf (,gpf a) (,gpf b))))))
+
;;; Printing request data
(defvar sx--overlays nil
@@ -349,13 +366,6 @@ Run after `sx-init--internal-hook'."
This is used internally to set initial values for variables such
as filters.")
-(defun sx--< (property x y &optional predicate)
- "Non-nil if PROPERTY attribute of alist X is less than that of Y.
-With optional argument PREDICATE, use it instead of `<'."
- (funcall (or predicate #'<)
- (cdr (assoc property x))
- (cdr (assoc property y))))
-
(defmacro sx-init-variable (variable value &optional setter)
"Set VARIABLE to VALUE using SETTER.
SETTER should be a function of two arguments. If SETTER is nil,