guix-commits
[Top][All Lists]
Advanced

[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.
 



reply via email to

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