[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
05/38: emacs: list: Generate numerical sort predicates.
From: |
Alex Kost |
Subject: |
05/38: emacs: list: Generate numerical sort predicates. |
Date: |
Sat, 02 Jan 2016 14:27:17 +0000 |
alezost pushed a commit to branch master
in repository guix.
commit e86a43d47108688d7412796fb03caa47f87279f0
Author: Alex Kost <address@hidden>
Date: Wed Nov 18 10:39:42 2015 +0300
emacs: list: Generate numerical sort predicates.
* emacs/guix-list.el: Generate predicates to sort tabulated list
columns numerically.
(guix-list-define-numerical-sorter)
(guix-list-define-numerical-sorters): New macros
(guix-list-column-format): Use 'guix-list-sort-numerically-0' for
generation "Number" column.
---
emacs/guix-list.el | 28 ++++++++++++++++++++++++----
1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/emacs/guix-list.el b/emacs/guix-list.el
index 6bb8571..d6045d4 100644
--- a/emacs/guix-list.el
+++ b/emacs/guix-list.el
@@ -72,9 +72,7 @@ entries, he will be prompted for confirmation."
(installed 12 t)
(synopsis 30 nil))
(generation
- (number 5
- ,(lambda (a b) (guix-list-sort-numerically 0 a b))
- :right-align t)
+ (number 5 guix-list-sort-numerically-0 :right-align t)
(current 10 t)
(time 20 t)
(path 30 t)))
@@ -143,12 +141,34 @@ non-nil, invert the sort."
(defun guix-list-sort-numerically (column a b)
"Compare COLUMN of tabulated entries A and B numerically.
-It is a sort predicate for `tabulated-list-format'.
+This function is used for sort predicates for `tabulated-list-format'.
Return non-nil, if B is bigger than A."
(cl-flet ((num (entry)
(string-to-number (aref (cadr entry) column))))
(> (num b) (num a))))
+(defmacro guix-list-define-numerical-sorter (column)
+ "Define numerical sort predicate for COLUMN.
+See `guix-list-sort-numerically' for details."
+ (let ((name (intern (format "guix-list-sort-numerically-%d" column)))
+ (doc (format "\
+Predicate to sort tabulated list by column %d numerically.
+See `guix-list-sort-numerically' for details."
+ column)))
+ `(defun ,name (a b)
+ ,doc
+ (guix-list-sort-numerically ,column a b))))
+
+(defmacro guix-list-define-numerical-sorters (n)
+ "Define numerical sort predicates for columns from 0 to N.
+See `guix-list-define-numerical-sorter' for details."
+ `(progn
+ ,@(mapcar (lambda (i)
+ `(guix-list-define-numerical-sorter ,i))
+ (number-sequence 0 n))))
+
+(guix-list-define-numerical-sorters 9)
+
(defun guix-list-make-tabulated-vector (entry-type fun)
"Call FUN on each column specification for ENTRY-TYPE.
- branch master updated (b989390 -> 1ae858f), Alex Kost, 2016/01/02
- 02/38: emacs: Add 'guix-with-indent'., Alex Kost, 2016/01/02
- 05/38: emacs: list: Generate numerical sort predicates.,
Alex Kost <=
- 01/38: emacs: Use "cl-list*" instead of "apply #'list"., Alex Kost, 2016/01/02
- 04/38: emacs: Simplify defining parameter titles., Alex Kost, 2016/01/02
- 09/38: emacs: Add 'guix-alist-put'., Alex Kost, 2016/01/02
- 07/38: emacs: list: Configure format in one place., Alex Kost, 2016/01/02
- 12/38: emacs: list: Generalize 'sort-key' code., Alex Kost, 2016/01/02
- 15/38: emacs: list: Factorize "edit package" commands., Alex Kost, 2016/01/02
- 08/38: emacs: Add 'guix-keyword-args-let'., Alex Kost, 2016/01/02
- 10/38: emacs: list: Generalize 'marks' code., Alex Kost, 2016/01/02
- 13/38: emacs: list: Add 'guix-list-mode-initialize'., Alex Kost, 2016/01/02
- 03/38: emacs: Add API for 'guix-entry'., Alex Kost, 2016/01/02