summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2015-11-18 11:44:52 +0300
committerAlex Kost <alezost@gmail.com>2016-01-02 17:25:35 +0300
commit376af769f9cad7f521611c230d192ac639159fda (patch)
treefb88da6ce36d8ef2af78507741f04e31001ad7be
parent0b9cd3206ab9ba4f8fd55139d42cdf5265c4b0e1 (diff)
downloadguix-376af769f9cad7f521611c230d192ac639159fda.tar.gz
emacs: list: Configure format in one place.
* emacs/guix-list.el: (guix-list-column-format): Merge this and...
  (guix-list-column-value-methods): ... this into...
  (guix-list-format): ... this.  New variable.
  (guix-list-tabulated-vector): Adjust accordingly.
  (guix-list-tabulated-format): Likewise.
  (guix-list-tabulated-entry): Likewise.
* doc/emacs.texi (Emacs Appearance): Likewise.
-rw-r--r--doc/emacs.texi3
-rw-r--r--emacs/guix-list.el89
2 files changed, 35 insertions, 57 deletions
diff --git a/doc/emacs.texi b/doc/emacs.texi
index e4608f09ef..fa0930d6aa 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -478,9 +478,8 @@ You can change almost any aspect of ``list'' / ``info'' buffers using
 the following variables:
 
 @table @code
-@item guix-list-column-format
+@item guix-list-format
 @itemx guix-list-column-titles
-@itemx guix-list-column-value-methods
 Specify the columns, their names, what and how is displayed in ``list''
 buffers.
 
diff --git a/emacs/guix-list.el b/emacs/guix-list.el
index 5e4df38c0e..f0e20193c0 100644
--- a/emacs/guix-list.el
+++ b/emacs/guix-list.el
@@ -58,31 +58,38 @@ entries, he will be prompted for confirmation."
   :type 'integer
   :group 'guix-list)
 
-(defvar guix-list-column-format
+(defvar guix-list-format
   `((package
-     (name 20 t)
-     (version 10 nil)
-     (outputs 13 t)
-     (installed 13 t)
-     (synopsis 30 nil))
+     (name guix-package-list-get-name 20 t)
+     (version nil 10 nil)
+     (outputs nil 13 t)
+     (installed guix-package-list-get-installed-outputs 13 t)
+     (synopsis guix-list-get-one-line 30 nil))
     (output
-     (name 20 t)
-     (version 10 nil)
-     (output 9 t)
-     (installed 12 t)
-     (synopsis 30 nil))
+     (name guix-package-list-get-name 20 t)
+     (version nil 10 nil)
+     (output nil 9 t)
+     (installed nil 12 t)
+     (synopsis guix-list-get-one-line 30 nil))
     (generation
-     (number 5 guix-list-sort-numerically-0 :right-align t)
-     (current 10 t)
-     (time 20 t)
-     (path 30 t)))
-  "Columns displayed in list buffers.
+     (number nil 5 guix-list-sort-numerically-0 :right-align t)
+     (current guix-generation-list-get-current 10 t)
+     (time guix-list-get-time 20 t)
+     (path guix-list-get-file-path 30 t)))
+  "List of format values of the displayed columns.
 Each element of the list has a form:
 
-  (ENTRY-TYPE . ((PARAM WIDTH SORT . PROPS) ...))
+  (ENTRY-TYPE . ((PARAM VALUE-FUN WIDTH SORT . PROPS) ...))
 
-PARAM is the name of an entry parameter of ENTRY-TYPE.  For the
-meaning of WIDTH, SORT and PROPS, see `tabulated-list-format'.")
+PARAM is the name of an entry parameter of ENTRY-TYPE.
+
+VALUE-FUN may be either nil or a function returning a value that
+will be inserted.  The function is called with 2 arguments: the
+first one is the value of the parameter; the second one is an
+entry (alist of parameter names and values).
+
+For the meaning of WIDTH, SORT and PROPS, see
+`tabulated-list-format'.")
 
 (defvar guix-list-column-titles
   '((generation
@@ -91,32 +98,6 @@ meaning of WIDTH, SORT and PROPS, see `tabulated-list-format'.")
 Has the same structure as `guix-param-titles', but titles from
 this list have a priority.")
 
-(defvar guix-list-column-value-methods
-  '((package
-     (name        . guix-package-list-get-name)
-     (synopsis    . guix-list-get-one-line)
-     (description . guix-list-get-one-line)
-     (installed   . guix-package-list-get-installed-outputs))
-    (output
-     (name        . guix-package-list-get-name)
-     (synopsis    . guix-list-get-one-line)
-     (description . guix-list-get-one-line))
-    (generation
-     (current     . guix-generation-list-get-current)
-     (time        . guix-list-get-time)
-     (path        . guix-list-get-file-path)))
-  "Methods for inserting parameter values in columns.
-Each element of the list has a form:
-
-  (ENTRY-TYPE . ((PARAM . FUN) ...))
-
-PARAM is the name of an entry parameter of ENTRY-TYPE.
-
-FUN is a function returning a value that will be inserted.  The
-function is called with 2 arguments: the first one is the value
-of the parameter; the second argument is an entry info (alist of
-parameters and their values).")
-
 (defun guix-list-param-title (entry-type param)
   "Return column title of an ENTRY-TYPE parameter PARAM."
   (or (guix-assq-value guix-list-column-titles
@@ -125,7 +106,7 @@ parameters and their values).")
 
 (defun guix-list-format (entry-type)
   "Return column format for ENTRY-TYPE."
-  (guix-assq-value guix-list-column-format entry-type))
+  (guix-assq-value guix-list-format entry-type))
 
 (defun guix-list-displayed-params (entry-type)
   "Return a list of ENTRY-TYPE parameters that should be displayed."
@@ -171,22 +152,22 @@ non-nil, invert the sort."
 (defun guix-list-tabulated-vector (entry-type fun)
   "Call FUN on each column specification for ENTRY-TYPE.
 
-FUN is called with 2 argument: parameter name and column
-specification (see `guix-list-column-format').
+FUN is applied to column specification as arguments (see
+`guix-list-format').
 
 Return a vector made of values of FUN calls."
   (apply #'vector
          (mapcar (lambda (col-spec)
-                   (funcall fun (car col-spec) (cdr col-spec)))
+                   (apply fun col-spec))
                  (guix-list-format entry-type))))
 
 (defun guix-list-tabulated-format (entry-type)
   "Return ENTRY-TYPE list specification for `tabulated-list-format'."
   (guix-list-tabulated-vector
    entry-type
-   (lambda (param spec)
+   (lambda (param _ &rest rest-spec)
      (cons (guix-list-param-title entry-type param)
-           spec))))
+           rest-spec))))
 
 (defun guix-list-insert-entries (entries entry-type)
   "Display ENTRIES of ENTRY-TYPE in the current list buffer.
@@ -207,10 +188,8 @@ ENTRIES should have a form of `guix-entries'."
 Parameters are taken from ENTRY-TYPE ENTRY."
   (guix-list-tabulated-vector
    entry-type
-   (lambda (param _)
-     (let ((val (guix-entry-value entry param))
-           (fun (guix-assq-value guix-list-column-value-methods
-                                 entry-type param)))
+   (lambda (param fun &rest _)
+     (let ((val (guix-entry-value entry param)))
        (if fun
            (funcall fun val entry)
          (guix-get-string val))))))