diff options
author | Alex Kost <alezost@gmail.com> | 2015-11-18 10:39:42 +0300 |
---|---|---|
committer | Alex Kost <alezost@gmail.com> | 2016-01-02 17:25:35 +0300 |
commit | e86a43d47108688d7412796fb03caa47f87279f0 (patch) | |
tree | 16e63708de44742ddf64391c612e0903b339e770 | |
parent | ceea647c72cac582126688c71e19e4c9f9137a63 (diff) | |
download | patches-e86a43d47108688d7412796fb03caa47f87279f0.tar patches-e86a43d47108688d7412796fb03caa47f87279f0.tar.gz |
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.
-rw-r--r-- | 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 6bb8571635..d6045d45cc 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. |