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: Thu, 30 Oct 2014 01:13:58 +0300 Message-ID: <87y4ryle1l.fsf@gmail.com> References: <87d29akflu.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:48192) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XjbVL-0006q1-5m for guix-devel@gnu.org; Wed, 29 Oct 2014 18:14:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XjbVB-0001WM-VO for guix-devel@gnu.org; Wed, 29 Oct 2014 18:14:11 -0400 In-Reply-To: <87d29akflu.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Wed, 29 Oct 2014 17:25:33 +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-29 19:25 +0300) wrote: > Hello, > > What would think of a patch like this: [...] > (defun guix-info-insert-entry (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." > (let ((region-beg (point))) > + (guix-info-insert-heading entry) > (mapc (lambda (param) > - (guix-info-insert-param param entry entry-type)) > + ;; The name, version, and synopsis are already displayed. > + (unless (memq param '(name version synopsis)) > + (guix-info-insert-param param entry entry-type))) > (guix-info-get-displayed-params entry-type)) > (when indent-level > (indent-rigidly region-beg (point) =E2=80=98guix-info-insert-entry=E2=80=99 is used to insert any type of info= rmation, not only packages, so you can see artifacts (empty lines and "=E2=80=93") in ot= her "views". [...] > It changes the rendering of package-info buffers such that, instead of > displaying something like: > > Name : coreutils > Version : 8.23 > Synopsis : Core GNU utilities (file, text, shell) > ... > > it first displays the important info in a visible heading, and then goes > on with the other fields unchanged: > > coreutils 8.23 > Core GNU utilities (file, text, shell) > > Outputs: > out Delete > ... > > On X11, the package name and version are displayed in a large > variable-width font, and the synopsis is displayed in a slightly smaller > font. I think it's a great idea! I'm attaching the modified version of your patch. I added there several variables that allow a user to specify functions for displaying info (perhaps there will be several variants of displaying info in the future). So if someone would like to return to the previous variant of displaying a package, he could do it with: (setq guix-info-insert-package-function nil) Thanks again, I really like your suggestion, I just prefer to keep previous possibilities instead of replacing them with the new ones. Are you going to make a commit or should I do it? (of course if you don't have comments on my patch) --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=tmp.diff diff --git a/emacs/guix-info.el b/emacs/guix-info.el index 551d79a..d4e6ecb 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)) -(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))))) +(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)) +(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) (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) @@ -433,6 +453,32 @@ See `insert-text-button' for the meaning of PROPERTIES." "Face used if a package is obsolete." :group 'guix-package-info) +(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.") + +(defun guix-package-info-insert-heading (entry) + "Insert the heading for package ENTRY. +Show package name, version, and synopsis." + (guix-format-insert (concat (guix-get-key-val entry 'name) " " + (guix-get-key-val entry 'version)) + 'guix-package-info-heading) + (insert "\n") + (guix-format-insert (guix-get-key-val entry 'synopsis) + 'guix-package-info-synopsis) + (insert "\n\n")) + +(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) + ;; The name, version, and synopsis are already displayed. + (unless (memq param '(name version synopsis)) + (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 +540,12 @@ formatted with this string, an action button is inserted.") (defvar guix-package-info-obsolete-string "(This package is obsolete)" "String used if a package is obsolete.") +(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 +634,11 @@ ENTRY is an alist with package info." :buffer-name "*Guix Package Info*" :required (id package-id installed non-unique)) +(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 +682,11 @@ ENTRY is an alist with package info." "Face used if a generation is not the current one." :group 'guix-generation-info) +(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) --=-=-=--