From 376af769f9cad7f521611c230d192ac639159fda Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Wed, 18 Nov 2015 11:44:52 +0300 Subject: [PATCH] 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. --- doc/emacs.texi | 3 +- emacs/guix-list.el | 89 ++++++++++++++++++---------------------------- 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))))))