~ruther/guix-local

cf910ceffc3ec61ee9761cabeda91ce1f5fdaf3a — Alex Kost 10 years ago 78fdbdc
emacs: list: Split 'guix-list-format' variable.

* emacs/guix-list.el: Generate 'guix-ENTRY-TYPE-list-format' variables
  for 'package', 'output' and 'generation' entry types.
  (guix-list-format): Remove.
  (guix-list-define-entry-type): Add ':format' keyword.
* doc/emacs.texi (Emacs Appearance): Adjust accordingly.
2 files changed, 48 insertions(+), 38 deletions(-)

M doc/emacs.texi
M emacs/guix-list.el
M doc/emacs.texi => doc/emacs.texi +3 -2
@@ 475,10 475,11 @@ Keymap with keys available when a point is placed on a button.
@subsubsection Appearance

You can change almost any aspect of ``list'' / ``info'' buffers using
the following variables:
the following variables (@dfn{ENTRY-TYPE} means @code{package},
@code{output} or @code{generation}):

@table @code
@item guix-list-format
@item guix-ENTRY-TYPE-list-format
@itemx guix-list-column-titles
Specify the columns, their names, what and how is displayed in ``list''
buffers.

M emacs/guix-list.el => emacs/guix-list.el +45 -36
@@ 51,39 51,6 @@
  "Face used for time stamps."
  :group 'guix-list-faces)

(defvar guix-list-format
  `((package
     (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 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 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 VALUE-FUN WIDTH SORT . PROPS) ...))

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
     (number . "N.")))


@@ 130,7 97,7 @@ This alist is filled by `guix-list-define-entry-type' macro.")

(defun guix-list-format (entry-type)
  "Return column format for ENTRY-TYPE."
  (guix-assq-value guix-list-format entry-type))
  (guix-list-value entry-type 'format))

(defun guix-list-displayed-params (entry-type)
  "Return a list of ENTRY-TYPE parameters that should be displayed."


@@ 459,9 426,14 @@ Same as `tabulated-list-sort', but also restore marks after sorting."

(defmacro guix-list-define-entry-type (entry-type &rest args)
  "Define common stuff for displaying ENTRY-TYPE entries in list buffers.
Remaining arguments (ARGS) should have a form [KEYWORD VALUE] ...

Remaining argument (ARGS) should have a form [KEYWORD VALUE] ...  The
following keywords are available:
Required keywords:

  - `:format' - default value of the generated
    `guix-ENTRY-TYPE-list-format' variable.

Optional keywords:

  - `:sort-key' - default value of the generated
    `guix-ENTRY-TYPE-list-sort-key' variable.


@@ 480,14 452,36 @@ following keywords are available:
         (describe-var       (intern (concat prefix "-describe-function")))
         (describe-count-var (intern (concat prefix
                                             "-describe-warning-count")))
         (format-var         (intern (concat prefix "-format")))
         (sort-key-var       (intern (concat prefix "-sort-key")))
         (marks-var          (intern (concat prefix "-marks"))))
    (guix-keyword-args-let args
        ((describe-val       :describe-function)
         (describe-count-val :describe-count 10)
         (format-val         :format)
         (sort-key-val       :sort-key)
         (marks-val          :marks))
      `(progn
         (defcustom ,format-var ,format-val
           ,(format "\
List of format values of the displayed columns.
Each element of the list has a form:

  (PARAM VALUE-FUN WIDTH SORT . PROPS)

PARAM is a name of '%s' entry parameter.

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'."
                    entry-type-str)
           :type 'sexp
           :group ',group)

         (defcustom ,sort-key-var ,sort-key-val
           ,(format "\
Default sort key for 'list' buffer with '%s' entries.


@@ 529,6 523,7 @@ See also `guix-list-describe'."
         (guix-alist-put!
          '((describe       . ,describe-var)
            (describe-count . ,describe-count-var)
            (format         . ,format-var)
            (sort-key       . ,sort-key-var)
            (marks          . ,marks-var))
          'guix-list-data ',entry-type)))))


@@ 547,6 542,11 @@ See also `guix-list-describe'."

(guix-list-define-entry-type package
  :describe-function 'guix-list-describe-ids
  :format '((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))
  :sort-key '(name)
  :marks '((install . ?I)
           (upgrade . ?U)


@@ 731,6 731,11 @@ The specification is suitable for `guix-process-package-actions'."

(guix-list-define-entry-type output
  :describe-function 'guix-output-list-describe
  :format '((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))
  :sort-key '(name)
  :marks '((install . ?I)
           (upgrade . ?U)


@@ 817,6 822,10 @@ See `guix-package-info-type'."

(guix-list-define-entry-type generation
  :describe-function 'guix-list-describe-ids
  :format '((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))
  :sort-key '(number . t)
  :marks '((delete . ?D)))