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.
master
Alex Kost 2015-11-18 11:44:52 +03:00
parent 0b9cd3206a
commit 376af769f9
2 changed files with 35 additions and 57 deletions

View File

@ -478,9 +478,8 @@ You can change almost any aspect of ``list'' / ``info'' buffers using
the following variables: the following variables:
@table @code @table @code
@item guix-list-column-format @item guix-list-format
@itemx guix-list-column-titles @itemx guix-list-column-titles
@itemx guix-list-column-value-methods
Specify the columns, their names, what and how is displayed in ``list'' Specify the columns, their names, what and how is displayed in ``list''
buffers. buffers.

View File

@ -58,31 +58,38 @@ entries, he will be prompted for confirmation."
:type 'integer :type 'integer
:group 'guix-list) :group 'guix-list)
(defvar guix-list-column-format (defvar guix-list-format
`((package `((package
(name 20 t) (name guix-package-list-get-name 20 t)
(version 10 nil) (version nil 10 nil)
(outputs 13 t) (outputs nil 13 t)
(installed 13 t) (installed guix-package-list-get-installed-outputs 13 t)
(synopsis 30 nil)) (synopsis guix-list-get-one-line 30 nil))
(output (output
(name 20 t) (name guix-package-list-get-name 20 t)
(version 10 nil) (version nil 10 nil)
(output 9 t) (output nil 9 t)
(installed 12 t) (installed nil 12 t)
(synopsis 30 nil)) (synopsis guix-list-get-one-line 30 nil))
(generation (generation
(number 5 guix-list-sort-numerically-0 :right-align t) (number nil 5 guix-list-sort-numerically-0 :right-align t)
(current 10 t) (current guix-generation-list-get-current 10 t)
(time 20 t) (time guix-list-get-time 20 t)
(path 30 t))) (path guix-list-get-file-path 30 t)))
"Columns displayed in list buffers. "List of format values of the displayed columns.
Each element of the list has a form: 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 PARAM is the name of an entry parameter of ENTRY-TYPE.
meaning of WIDTH, SORT and PROPS, see `tabulated-list-format'.")
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 (defvar guix-list-column-titles
'((generation '((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 Has the same structure as `guix-param-titles', but titles from
this list have a priority.") 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) (defun guix-list-param-title (entry-type param)
"Return column title of an ENTRY-TYPE parameter PARAM." "Return column title of an ENTRY-TYPE parameter PARAM."
(or (guix-assq-value guix-list-column-titles (or (guix-assq-value guix-list-column-titles
@ -125,7 +106,7 @@ parameters and their values).")
(defun guix-list-format (entry-type) (defun guix-list-format (entry-type)
"Return column format for 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) (defun guix-list-displayed-params (entry-type)
"Return a list of ENTRY-TYPE parameters that should be displayed." "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) (defun guix-list-tabulated-vector (entry-type fun)
"Call FUN on each column specification for ENTRY-TYPE. "Call FUN on each column specification for ENTRY-TYPE.
FUN is called with 2 argument: parameter name and column FUN is applied to column specification as arguments (see
specification (see `guix-list-column-format'). `guix-list-format').
Return a vector made of values of FUN calls." Return a vector made of values of FUN calls."
(apply #'vector (apply #'vector
(mapcar (lambda (col-spec) (mapcar (lambda (col-spec)
(funcall fun (car col-spec) (cdr col-spec))) (apply fun col-spec))
(guix-list-format entry-type)))) (guix-list-format entry-type))))
(defun guix-list-tabulated-format (entry-type) (defun guix-list-tabulated-format (entry-type)
"Return ENTRY-TYPE list specification for `tabulated-list-format'." "Return ENTRY-TYPE list specification for `tabulated-list-format'."
(guix-list-tabulated-vector (guix-list-tabulated-vector
entry-type entry-type
(lambda (param spec) (lambda (param _ &rest rest-spec)
(cons (guix-list-param-title entry-type param) (cons (guix-list-param-title entry-type param)
spec)))) rest-spec))))
(defun guix-list-insert-entries (entries entry-type) (defun guix-list-insert-entries (entries entry-type)
"Display ENTRIES of ENTRY-TYPE in the current list buffer. "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." Parameters are taken from ENTRY-TYPE ENTRY."
(guix-list-tabulated-vector (guix-list-tabulated-vector
entry-type entry-type
(lambda (param _) (lambda (param fun &rest _)
(let ((val (guix-entry-value entry param)) (let ((val (guix-entry-value entry param)))
(fun (guix-assq-value guix-list-column-value-methods
entry-type param)))
(if fun (if fun
(funcall fun val entry) (funcall fun val entry)
(guix-get-string val)))))) (guix-get-string val))))))