From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Kost Subject: Re: [PATCH] emacs: Add a name/version/synopsis heading in package-info buffers Date: Fri, 31 Oct 2014 00:38:22 +0300 Message-ID: <87d299dyr5.fsf@gmail.com> References: <87d29akflu.fsf@gnu.org> <87y4ryle1l.fsf@gmail.com> <87fve5u27p.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:35798) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XkE5q-0002F3-S4 for guix-devel@gnu.org; Fri, 31 Oct 2014 11:27:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XjxQG-0003YB-J1 for guix-devel@gnu.org; Thu, 30 Oct 2014 17:38:30 -0400 In-Reply-To: <87fve5u27p.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Thu, 30 Oct 2014 14:16:58 +0100") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: Guix-devel --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ludovic Court=C3=A8s (2014-10-30 16:16 +0300) wrote: > Alex Kost skribis: [...] >> Thanks again, I really like your suggestion, I just prefer to keep >> previous possibilities instead of replacing them with the new ones. > > Yes, why not. I=E2=80=99m a bit concerned about the cost of keeping seve= ral > variants of different things, esp. because in practice almost only one > variant would be tested. WDYT? I try to keep track of all possibilities :-) >> Are you going to make a commit or should I do it? (of course if you >> don't have comments on my patch) > > Please go ahead! OK, I'm attaching a patch. Is =E2=80=9CCo-authored-by =E2=80=A6=E2=80=9D e= nough or should you be credited in some other way? > I=E2=80=99m thinking perhaps we should do something similar for the descr= iption > itself, like display it right below the synopsis. Thoughts? I think a simple heading may consist of just "name version" and other parameters may be specified by a user. For this purpose I added =E2=80=98guix-package-info-heading-params=E2=80=99 variable. Do you think = a description should also be displayed in the heading by default? --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0001-emacs-Add-package-info-heading.patch Content-Transfer-Encoding: quoted-printable >From 08cb220407388142adba3e6aa884dd0d2fd5a844 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Fri, 31 Oct 2014 00:11:55 +0300 Subject: [PATCH] emacs: Add package info heading. MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ludovic Court=C3=A8s * emacs/guix-info.el: (guix-package-info-heading): New face. (guix-package-info-synopsis): Modify face. (guix-info-insert-entry-default, guix-package-info-insert-heading, guix-package-info-insert-with-heading): New procedures. (guix-package-info-heading-params, guix-info-insert-package-function, guix-info-insert-installed-function, guix-info-insert-output-function, guix-info-insert-generation-function): New variables. --- emacs/guix-info.el | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/emacs/guix-info.el b/emacs/guix-info.el index 551d79a..88363e5 100644 --- a/emacs/guix-info.el +++ b/emacs/guix-info.el @@ -198,7 +198,8 @@ ENTRIES should have a form of `guix-entries'." entries guix-info-delimiter)) =20 -(defun guix-info-insert-entry (entry entry-type &optional indent-level) +(defun guix-info-insert-entry-default (entry entry-type + &optional indent-level) "Insert ENTRY of ENTRY-TYPE into the current info buffer. If INDENT-LEVEL is non-nil, indent displayed information by this number of `guix-info-indent' spaces." @@ -210,6 +211,18 @@ number of `guix-info-indent' spaces." (indent-rigidly region-beg (point) (* indent-level guix-info-indent))))) =20 +(defun guix-info-insert-entry (entry entry-type &optional indent-level) + "Insert ENTRY of ENTRY-TYPE into the current info buffer. +Use `guix-info-insert-ENTRY-TYPE-function' or +`guix-info-insert-entry-default' if it is nil." + (let* ((var (intern (concat "guix-info-insert-" + (symbol-name entry-type) + "-function"))) + (fun (symbol-value var))) + (if (functionp fun) + (funcall fun entry) + (guix-info-insert-entry-default entry entry-type indent-level)))) + (defun guix-info-insert-param (param entry entry-type) "Insert title and value of a PARAM at point. ENTRY is alist with parameters and their values. @@ -376,6 +389,12 @@ See `insert-text-button' for the meaning of PROPERTIES= ." (guix-define-buffer-type info package :required (id installed non-unique)) =20 +(defface guix-package-info-heading + '((((type tty pc) (class color)) :weight bold) + (t :height 1.6 :weight bold :inherit variable-pitch)) + "Face for package name and version headings." + :group 'guix-package-info) + (defface guix-package-info-name '((t :inherit font-lock-keyword-face)) "Face used for a name of a package." @@ -392,7 +411,8 @@ See `insert-text-button' for the meaning of PROPERTIES." :group 'guix-package-info) =20 (defface guix-package-info-synopsis - '((t :inherit font-lock-doc-face)) + '((((type tty pc) (class color)) :weight bold) + (t :height 1.1 :weight bold :inherit variable-pitch)) "Face used for a synopsis of a package." :group 'guix-package-info) =20 @@ -433,6 +453,40 @@ See `insert-text-button' for the meaning of PROPERTIES= ." "Face used if a package is obsolete." :group 'guix-package-info) =20 +(defvar guix-info-insert-package-function + #'guix-package-info-insert-with-heading + "Function used to insert a package information. +It is called with a single argument - alist of package parameters. +If nil, insert package in a default way.") + +(defvar guix-package-info-heading-params '(synopsis description) + "List of parameters displayed in a heading along with name and version.") + +(defun guix-package-info-insert-heading (entry) + "Insert the heading for package ENTRY. +Show package name, version, and `guix-package-info-heading-params'." + (guix-format-insert (concat (guix-get-key-val entry 'name) " " + (guix-get-key-val entry 'version)) + 'guix-package-info-heading) + (insert "\n\n") + (mapc (lambda (param) + (let ((val (guix-get-key-val entry param)) + (face (guix-get-symbol (symbol-name param) + 'info 'package))) + (when val + (guix-format-insert val (and (facep face) face)) + (insert "\n\n")))) + guix-package-info-heading-params)) + +(defun guix-package-info-insert-with-heading (entry) + "Insert package ENTRY with its heading at point." + (guix-package-info-insert-heading entry) + (mapc (lambda (param) + (unless (or (memq param '(name version)) + (memq param guix-package-info-heading-params)) + (guix-info-insert-param param entry 'package))) + (guix-info-get-displayed-params 'package))) + (defun guix-package-info-insert-description (desc &optional _) "Insert description DESC at point." (guix-info-insert-val-simple desc 'guix-package-info-description)) @@ -494,6 +548,12 @@ formatted with this string, an action button is insert= ed.") (defvar guix-package-info-obsolete-string "(This package is obsolete)" "String used if a package is obsolete.") =20 +(defvar guix-info-insert-installed-function nil + "Function used to insert an installed information. +It is called with a single argument - alist of installed +parameters (`output', `path', `dependencies'). +If nil, insert installed info in a default way.") + (defun guix-package-info-insert-outputs (outputs entry) "Insert OUTPUTS from package ENTRY at point." (and (guix-get-key-val entry 'obsolete) @@ -582,6 +642,11 @@ ENTRY is an alist with package info." :buffer-name "*Guix Package Info*" :required (id package-id installed non-unique)) =20 +(defvar guix-info-insert-output-function nil + "Function used to insert an output information. +It is called with a single argument - alist of output parameters. +If nil, insert output in a default way.") + (defun guix-output-info-insert-version (version entry) "Insert output VERSION and obsolete text if needed at point." (guix-info-insert-val-default version @@ -625,6 +690,11 @@ ENTRY is an alist with package info." "Face used if a generation is not the current one." :group 'guix-generation-info) =20 +(defvar guix-info-insert-generation-function nil + "Function used to insert a generation information. +It is called with a single argument - alist of generation parameters. +If nil, insert generation in a default way.") + (defun guix-generation-info-insert-number (number &optional _) "Insert generation NUMBER and action buttons." (guix-info-insert-val-default number 'guix-generation-info-number) --=20 2.1.2 --=-=-=--