* [PATCH 0/7]: Add "M-x guix-licenses" and friends.
@ 2016-01-22 8:19 Alex Kost
2016-01-22 8:19 ` [PATCH 1/7] emacs: Rename 'file-path' to 'file-name' Alex Kost
` (6 more replies)
0 siblings, 7 replies; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
Hello, this patchset adds the following emacs commands:
- guix-browse-license-url
- guix-packages-by-license
- guix-licenses
Patches:
[PATCH 1/7] emacs: Rename 'file-path' to 'file-name'.
Actually this patch is independent from the rest patchset, I just
added it for the company.
[PATCH 2/7] licenses: Add a list of licenses.
[PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
[PATCH 4/7] emacs: Buttonize licenses in "Package Info".
[PATCH 5/7] emacs: Add 'guix-packages-by-license' command.
[PATCH 6/7] emacs: list: Support displaying URL links.
[PATCH 7/7] emacs: Add interface for licenses.
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 1/7] emacs: Rename 'file-path' to 'file-name'.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:06 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 2/7] licenses: Add a list of licenses Alex Kost
` (5 subsequent siblings)
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-info.el (guix-info-file-path): Rename to...
(guix-info-file-name): ... this.
* emacs/guix-list.el (guix-list-file-path): Rename to...
(guix-list-file-name): ... this.
(guix-list-get-file-path): Rename to...
(guix-list-get-file-name): ... this.
* emacs/guix-ui-generation.el (guix-generation-list-format): Adjust
accordingly.
* emacs/guix-ui-system-generation.el (guix-system-generation-list-format):
Likewise.
* NEWS: Mention faces renaming.
---
NEWS | 3 ++-
emacs/guix-info.el | 6 +++---
emacs/guix-list.el | 14 +++++++-------
emacs/guix-ui-generation.el | 2 +-
emacs/guix-ui-system-generation.el | 2 +-
5 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/NEWS b/NEWS
index 0084394..b27ebc7 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,7 @@ Please send Guix bug reports to bug-guix@gnu.org.
*** Emacs interface for system generations
*** Emacs interface for hydra.gnu.org
-*** Changes in Emacs interface variables
+*** Changes in Emacs interface variables and faces
In the following names, BUFFER-TYPE means "info" or "list";
ENTRY-TYPE means "package", "output" or "generation".
@@ -30,6 +30,7 @@ ENTRY-TYPE means "package", "output" or "generation".
- guix-buffer-name-function -> guix-ui-buffer-name-function
- guix-update-after-operation -> guix-ui-update-after-operation
- guix-search-params -> guix-package-search-params
+- guix-BUFFER-TYPE-file-path (face) -> guix-BUFFER-TYPE-file-name
**** Replaced
- guix-list-column-format, guix-list-column-value-methods ->
diff --git a/emacs/guix-info.el b/emacs/guix-info.el
index 644533e..6aefd2f 100644
--- a/emacs/guix-info.el
+++ b/emacs/guix-info.el
@@ -42,9 +42,9 @@
"Face used for titles of parameters."
:group 'guix-info-faces)
-(defface guix-info-file-path
+(defface guix-info-file-name
'((t :inherit link))
- "Face used for file paths."
+ "Face used for file names."
:group 'guix-info-faces)
(defface guix-info-url
@@ -337,7 +337,7 @@ BUTTON-OR-FACE is a button type)."
(define-button-type 'guix-file
:supertype 'guix
- 'face 'guix-info-file-path
+ 'face 'guix-info-file-name
'help-echo "Find file"
'action (lambda (btn)
(guix-find-file (button-label btn))))
diff --git a/emacs/guix-list.el b/emacs/guix-list.el
index 7e57f42..51eb106 100644
--- a/emacs/guix-list.el
+++ b/emacs/guix-list.el
@@ -33,9 +33,9 @@
(guix-define-buffer-type list)
-(defface guix-list-file-path
- '((t :inherit guix-info-file-path))
- "Face used for file paths."
+(defface guix-list-file-name
+ '((t :inherit guix-info-file-name))
+ "Face used for file names."
:group 'guix-list-faces)
(defface guix-list-time
@@ -214,10 +214,10 @@ VAL may be nil."
(guix-get-string (guix-get-time-string seconds)
'guix-list-time))
-(defun guix-list-get-file-path (path &optional _)
- "Return PATH button specification for `tabulated-list-entries'."
- (list path
- 'face 'guix-list-file-path
+(defun guix-list-get-file-name (file-name &optional _)
+ "Return FILE-NAME button specification for `tabulated-list-entries'."
+ (list file-name
+ 'face 'guix-list-file-name
'action (lambda (btn) (find-file (button-label btn)))
'follow-link t
'help-echo "Find file"))
diff --git a/emacs/guix-ui-generation.el b/emacs/guix-ui-generation.el
index 4047850..74b8ff2 100644
--- a/emacs/guix-ui-generation.el
+++ b/emacs/guix-ui-generation.el
@@ -166,7 +166,7 @@ current profile's GENERATION."
: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))
+ (path guix-list-get-file-name 30 t))
:titles '((number . "N."))
:sort-key '(number . t)
:marks '((delete . ?D)))
diff --git a/emacs/guix-ui-system-generation.el b/emacs/guix-ui-system-generation.el
index d79f3bc..7f4d76d 100644
--- a/emacs/guix-ui-system-generation.el
+++ b/emacs/guix-ui-system-generation.el
@@ -71,7 +71,7 @@ SEARCH-VALUES."
(current guix-generation-list-get-current 10 t)
(label nil 40 t)
(time guix-list-get-time 20 t)
- (path guix-list-get-file-path 30 t))
+ (path guix-list-get-file-name 30 t))
:titles guix-generation-list-titles
:sort-key '(number . t)
:marks '((delete . ?D)))
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/7] licenses: Add a list of licenses.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
2016-01-22 8:19 ` [PATCH 1/7] emacs: Rename 'file-path' to 'file-name' Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:08 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 3/7] emacs: Add 'guix-browse-license-url' command Alex Kost
` (4 subsequent siblings)
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* guix/licenses.scm (%licenses): New variable.
---
guix/licenses.scm | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 9ace7f5..75e4426 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2012, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
;;;
@@ -23,6 +24,7 @@
(define-module (guix licenses)
#:use-module (srfi srfi-9)
#:export (license? license-name license-uri license-comment
+ %licenses
agpl3 agpl3+
asl2.0
boost1.0
@@ -405,4 +407,46 @@ of licenses, approved as free by the FSF. More details can be found at URI."
uri
comment))
+(define %licenses
+ ;; List of all licenses.
+ (list
+ agpl3 agpl3+
+ asl2.0
+ boost1.0
+ bsd-2 bsd-3 bsd-4
+ cc0
+ cc-by-sa4.0 cc-by-sa3.0 cc-by3.0
+ cddl1.0
+ cecill-c
+ artistic2.0 clarified-artistic
+ copyleft-next
+ cpl1.0
+ epl1.0
+ expat
+ freetype
+ gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+
+ gfl1.0
+ fdl1.3+
+ opl1.0+
+ isc
+ ijg
+ ibmpl1.0
+ imlib2
+ ipa
+ lgpl2.0 lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3 lgpl3+
+ mpl1.1 mpl2.0
+ ms-pl
+ ncsa
+ openldap2.8 openssl
+ psfl public-domain
+ qpl
+ ruby
+ sgifreeb2.0
+ silofl1.1
+ sleepycat
+ vim
+ x11
+ zpl2.1
+ zlib))
+
;;; licenses.scm ends here
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
2016-01-22 8:19 ` [PATCH 1/7] emacs: Rename 'file-path' to 'file-name' Alex Kost
2016-01-22 8:19 ` [PATCH 2/7] licenses: Add a list of licenses Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:13 ` Ludovic Courtès
2016-01-23 17:18 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 4/7] emacs: Buttonize licenses in "Package Info" Alex Kost
` (3 subsequent siblings)
6 siblings, 2 replies; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-main.scm (license-names, license-name->license)
(license-name->uri): New procedures.
* emacs/guix-read.el (guix-license-names, guix-read-license-name): New
procedures.
* emacs/guix-license.el: New file.
* emacs.am (ELFILES): Add it.
---
emacs.am | 3 ++-
emacs/guix-license.el | 44 ++++++++++++++++++++++++++++++++++++++++++++
emacs/guix-main.scm | 18 ++++++++++++++++++
emacs/guix-read.el | 11 ++++++++++-
4 files changed, 74 insertions(+), 2 deletions(-)
create mode 100644 emacs/guix-license.el
diff --git a/emacs.am b/emacs.am
index d0d4dfb..6af9596 100644
--- a/emacs.am
+++ b/emacs.am
@@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
-# Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+# Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
#
# This file is part of GNU Guix.
#
@@ -37,6 +37,7 @@ ELFILES = \
emacs/guix-hydra-jobset.el \
emacs/guix-info.el \
emacs/guix-init.el \
+ emacs/guix-license.el \
emacs/guix-list.el \
emacs/guix-messages.el \
emacs/guix-pcomplete.el \
diff --git a/emacs/guix-license.el b/emacs/guix-license.el
new file mode 100644
index 0000000..a28b45e
--- /dev/null
+++ b/emacs/guix-license.el
@@ -0,0 +1,44 @@
+;;; guix-license.el --- Licenses
+
+;; Copyright © 2016 Alex Kost <alezost@gmail.com>
+
+;; This file is part of GNU Guix.
+
+;; GNU Guix is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Guix is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides the code to work with licenses of Guix packages.
+
+;;; Code:
+
+(require 'guix-read)
+(require 'guix-backend)
+(require 'guix-guile)
+
+(defun guix-license-name->url (license)
+ "Return URL of a LICENSE."
+ (or (guix-eval-read (guix-make-guile-expression
+ 'license-name->uri license))
+ (error "Hm, I don't know URL of '%s' license" license)))
+
+;;;###autoload
+(defun guix-browse-license-url (license)
+ "Browse URL of a LICENSE."
+ (interactive (list (guix-read-license-name)))
+ (browse-url (guix-license-name->url license)))
+
+(provide 'guix-license)
+
+;;; guix-license.el ends here
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 236c882..7706921 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -1042,3 +1042,21 @@ Return #t if the shell command was executed successfully."
;; See the comment to 'guix-package-names' function in "guix-popup.el".
(define (package-names-lists)
(map list (package-names)))
+
+\f
+;;; Licenses
+
+(define (license-names)
+ "Return a list of names of available licenses."
+ (map license-name %licenses))
+
+(define license-name->license
+ (memoize
+ (lambda (name)
+ (find (lambda (l)
+ (string=? name (license-name l)))
+ %licenses))))
+
+(define (license-name->uri name)
+ (and=> (license-name->license name)
+ license-uri))
diff --git a/emacs/guix-read.el b/emacs/guix-read.el
index 3bc7b16..a1a6b86 100644
--- a/emacs/guix-read.el
+++ b/emacs/guix-read.el
@@ -1,6 +1,6 @@
;;; guix-read.el --- Minibuffer readers
-;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
;; This file is part of GNU Guix.
@@ -58,6 +58,10 @@
'package-names-lists)))
#'string<))
+(guix-memoized-defun guix-license-names ()
+ "Return a list of names of available licenses."
+ (guix-eval-read (guix-make-guile-expression 'license-names)))
+
\f
;;; Readers
@@ -122,6 +126,11 @@
:multiple-prompt "Package,s: "
:multiple-separator " ")
+(guix-define-readers
+ :completions-getter guix-license-names
+ :single-reader guix-read-license-name
+ :single-prompt "License: ")
+
(provide 'guix-read)
;;; guix-read.el ends here
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/7] emacs: Buttonize licenses in "Package Info".
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
` (2 preceding siblings ...)
2016-01-22 8:19 ` [PATCH 3/7] emacs: Add 'guix-browse-license-url' command Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:14 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 5/7] emacs: Add 'guix-packages-by-license' command Alex Kost
` (2 subsequent siblings)
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-ui-package.el (guix-package-license): New button type.
(guix-package-info-format, guix-output-info-format): Use it.
* doc/emacs.texi (Emacs Info buffer): Mention it.
---
doc/emacs.texi | 1 +
emacs/guix-ui-package.el | 12 ++++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/doc/emacs.texi b/doc/emacs.texi
index eb470ab..d321a89 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -355,6 +355,7 @@ emacs, The GNU Emacs Manual}) which can be used to:
@item install/remove a package;
@item jump to a package location;
@item browse home page of a package;
+@item browse license URL;
@item describe packages from ``Inputs'' fields.
@end itemize
diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el
index 2951452..655ed74 100644
--- a/emacs/guix-ui-package.el
+++ b/emacs/guix-ui-package.el
@@ -35,6 +35,7 @@
(require 'guix-entry)
(require 'guix-utils)
(require 'guix-hydra-build)
+(require 'guix-license)
(guix-ui-define-entry-type package)
(guix-ui-define-entry-type output)
@@ -220,7 +221,7 @@ ENTRIES is a list of package entries to get info about packages."
(source simple guix-package-info-insert-source)
(location format (format guix-package-location))
(home-url format (format guix-url))
- (license format (format guix-package-info-license))
+ (license format (format guix-package-license))
(systems format guix-package-info-insert-systems)
(inputs format (format guix-package-input))
(native-inputs format (format guix-package-native-input))
@@ -338,6 +339,13 @@ formatted with this string, an action button is inserted.")
'action (lambda (btn)
(guix-find-location (button-label btn))))
+(define-button-type 'guix-package-license
+ :supertype 'guix
+ 'face 'guix-package-info-license
+ 'help-echo "Browse license URL"
+ 'action (lambda (btn)
+ (guix-browse-license-url (button-label btn))))
+
(define-button-type 'guix-package-name
:supertype 'guix
'face 'guix-package-info-name-button
@@ -767,7 +775,7 @@ for all ARGS."
(dependencies simple (indent guix-file))
(location format (format guix-package-location))
(home-url format (format guix-url))
- (license format (format guix-package-info-license))
+ (license format (format guix-package-license))
(systems format guix-package-info-insert-systems)
(inputs format (format guix-package-input))
(native-inputs format (format guix-package-native-input))
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/7] emacs: Add 'guix-packages-by-license' command.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
` (3 preceding siblings ...)
2016-01-22 8:19 ` [PATCH 4/7] emacs: Buttonize licenses in "Package Info" Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:15 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 6/7] emacs: list: Support displaying URL links Alex Kost
2016-01-22 8:19 ` [PATCH 7/7] emacs: Add interface for licenses Alex Kost
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-main.scm (packages-by-license): New procedure.
(%patterns-makers): Add 'license' search type.
* emacs/guix-messages.el (guix-message-packages-by-license): New procedure.
(guix-messages): Use it.
* emacs/guix-ui-package.el (guix-packages-by-license): New command.
* doc/emacs.texi (Emacs Commands): Document it.
---
doc/emacs.texi | 3 +++
emacs/guix-main.scm | 11 +++++++++++
emacs/guix-messages.el | 15 +++++++++++++++
emacs/guix-ui-package.el | 12 ++++++++++++
4 files changed, 41 insertions(+)
diff --git a/doc/emacs.texi b/doc/emacs.texi
index d321a89..e72a386 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -158,6 +158,9 @@ but cannot be found among available packages).
@item M-x guix-packages-by-name
Display package(s) with the specified name.
+@item M-x guix-packages-by-license
+Display package(s) with the specified license.
+
@item M-x guix-search-by-regexp
Search for packages by a specified regexp. By default ``name'',
``synopsis'' and ``description'' of the packages will be searched. This
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 7706921..c39501d 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -403,6 +403,12 @@ MATCH-PARAMS is a list of parameters that REGEXP can match."
(let ((re (make-regexp regexp regexp/icase)))
(matching-packages (cut package-match? <> re))))
+(define (packages-by-license license)
+ "Return a list of packages with LICENSE."
+ (matching-packages
+ (lambda (package)
+ (memq license (list-maybe (package-license package))))))
+
(define (all-available-packages)
"Return a list of all available packages."
(matching-packages (const #t)))
@@ -663,6 +669,9 @@ ENTRIES is a list of installed manifest entries."
(manifest-output-proc (apply-to-first manifest-output-patterns))
(regexp-proc (lambda (_ regexp params . __)
(packages-by-regexp regexp params)))
+ (license-proc (lambda (_ license-name)
+ (packages-by-license
+ (license-name->license license-name))))
(all-proc (lambda _ (all-available-packages)))
(newest-proc (lambda _ (newest-available-packages))))
`((package
@@ -671,6 +680,7 @@ ENTRIES is a list of installed manifest entries."
(installed . ,manifest-package-proc)
(obsolete . ,(apply-to-first obsolete-package-patterns))
(regexp . ,regexp-proc)
+ (license . ,license-proc)
(all-available . ,all-proc)
(newest-available . ,newest-proc))
(output
@@ -679,6 +689,7 @@ ENTRIES is a list of installed manifest entries."
(installed . ,manifest-output-proc)
(obsolete . ,(apply-to-first obsolete-output-patterns))
(regexp . ,regexp-proc)
+ (license . ,license-proc)
(all-available . ,all-proc)
(newest-available . ,newest-proc)))))
diff --git a/emacs/guix-messages.el b/emacs/guix-messages.el
index c4f15dc..de0331f 100644
--- a/emacs/guix-messages.el
+++ b/emacs/guix-messages.el
@@ -36,6 +36,10 @@
(name
,(lambda (_ entries names)
(guix-message-packages-by-name entries 'package names)))
+ (license
+ ,(lambda (_ entries licenses)
+ (apply #'guix-message-packages-by-license
+ entries 'package licenses)))
(regexp
(0 "No packages matching '%s'." val)
(1 "A single package matching '%s'." val)
@@ -64,6 +68,10 @@
(name
,(lambda (_ entries names)
(guix-message-packages-by-name entries 'output names)))
+ (license
+ ,(lambda (_ entries licenses)
+ (apply #'guix-message-packages-by-license
+ entries 'output licenses)))
(regexp
(0 "No package outputs matching '%s'." val)
(1 "A single package output matching '%s'." val)
@@ -159,6 +167,13 @@ Try \"M-x guix-search-by-name\"."
(guix-message-string-name (car names))))))
(message "%s %s." str-beg str-end)))
+(defun guix-message-packages-by-license (entries entry-type license)
+ "Display a message for packages or outputs searched by LICENSE."
+ (let* ((count (length entries))
+ (str-beg (guix-message-string-entries count entry-type))
+ (str-end (format "with license '%s'" license)))
+ (message "%s %s." str-beg str-end)))
+
(defun guix-message-generations-by-time (profile entries times)
"Display a message for generations searched by TIMES."
(let* ((count (length entries))
diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el
index 655ed74..414bc9b 100644
--- a/emacs/guix-ui-package.el
+++ b/emacs/guix-ui-package.el
@@ -35,6 +35,7 @@
(require 'guix-entry)
(require 'guix-utils)
(require 'guix-hydra-build)
+(require 'guix-read)
(require 'guix-license)
(guix-ui-define-entry-type package)
@@ -933,6 +934,17 @@ Interactively with prefix, prompt for PROFILE."
(guix-package-get-display profile 'name name))
;;;###autoload
+(defun guix-packages-by-license (license &optional profile)
+ "Display Guix packages with LICENSE.
+LICENSE is a license name string.
+If PROFILE is nil, use `guix-current-profile'.
+Interactively with prefix, prompt for PROFILE."
+ (interactive
+ (list (guix-read-license-name)
+ (guix-ui-read-profile)))
+ (guix-package-get-display profile 'license license))
+
+;;;###autoload
(defun guix-search-by-regexp (regexp &optional params profile)
"Search for Guix packages by REGEXP.
PARAMS are package parameters that should be searched.
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/7] emacs: list: Support displaying URL links.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
` (4 preceding siblings ...)
2016-01-22 8:19 ` [PATCH 5/7] emacs: Add 'guix-packages-by-license' command Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:15 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 7/7] emacs: Add interface for licenses Alex Kost
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-list.el (guix-list-url): New face.
(guix-list-get-url): New procedure.
---
emacs/guix-list.el | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/emacs/guix-list.el b/emacs/guix-list.el
index 51eb106..c91c67c 100644
--- a/emacs/guix-list.el
+++ b/emacs/guix-list.el
@@ -38,6 +38,11 @@
"Face used for file names."
:group 'guix-list-faces)
+(defface guix-list-url
+ '((t :inherit guix-info-url))
+ "Face used for URLs."
+ :group 'guix-list-faces)
+
(defface guix-list-time
'((t :inherit guix-info-time))
"Face used for time stamps."
@@ -222,6 +227,14 @@ VAL may be nil."
'follow-link t
'help-echo "Find file"))
+(defun guix-list-get-url (url &optional _)
+ "Return URL button specification for `tabulated-list-entries'."
+ (list url
+ 'face 'guix-list-url
+ 'action (lambda (btn) (browse-url (button-label btn)))
+ 'follow-link t
+ 'help-echo "Browse URL"))
+
\f
;;; 'List' lines
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 7/7] emacs: Add interface for licenses.
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
` (5 preceding siblings ...)
2016-01-22 8:19 ` [PATCH 6/7] emacs: list: Support displaying URL links Alex Kost
@ 2016-01-22 8:19 ` Alex Kost
2016-01-23 17:17 ` Ludovic Courtès
6 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-22 8:19 UTC (permalink / raw)
To: guix-devel
* emacs/guix-main.scm (%license-param-alist): New variable.
(license->sexp, find-licenses, license-entries): New procedures.
* emacs/guix-license.el (guix-license-get-entries)
(guix-license-get-display, guix-license-insert-packages-button)
(guix-license-insert-comment, guix-license-list-describe)
(guix-license-list-show-packages): New procedures.
(guix-licenses): New command.
* doc/emacs.texi (Emacs Licenses): New node.
(Emacs Interface): Add it.
* doc/guix.texi (Top): Add it.
* NEWS: Mention new interface.
---
NEWS | 1 +
doc/emacs.texi | 22 +++++++++++++
doc/guix.texi | 1 +
emacs/guix-license.el | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++
emacs/guix-main.scm | 22 +++++++++++++
5 files changed, 132 insertions(+)
diff --git a/NEWS b/NEWS
index b27ebc7..010789e 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,7 @@ Please send Guix bug reports to bug-guix@gnu.org.
** Package management
+*** Emacs interface for licenses
*** Emacs interface for system generations
*** Emacs interface for hydra.gnu.org
*** Changes in Emacs interface variables and faces
diff --git a/doc/emacs.texi b/doc/emacs.texi
index e72a386..2fa28c9 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -9,6 +9,7 @@ Guix convenient and fun.
@menu
* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
* Package Management: Emacs Package Management. Managing packages and generations.
+* Licenses: Emacs Licenses. Interface for licenses of Guix packages.
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
@@ -520,6 +521,27 @@ Various settings for ``info'' buffers.
@end table
+@node Emacs Licenses
+@section Licenses
+
+If you want to browse an URL of a particular license, or to look at a
+list of licenses, you may use the following commands:
+
+@table @kbd
+
+@item M-x guix-browse-license-url
+Choose a license from a completion list to browse its URL using
+@code{browse-url} function (@pxref{Browse-URL,,, emacs, The GNU Emacs
+Manual}).
+
+@item M-x guix-licenses
+Display a list of available licenses. You can press @kbd{@key{RET}}
+there to display packages with this license in the same way as @kbd{M-x
+guix-packages-by-license} would do (@pxref{Emacs Commands}).
+
+@end table
+
+
@node Emacs Popup Interface
@section Popup Interface
diff --git a/doc/guix.texi b/doc/guix.texi
index 592ec3c..1f513da 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -111,6 +111,7 @@ Emacs Interface
* Initial Setup: Emacs Initial Setup. Preparing @file{~/.emacs}.
* Package Management: Emacs Package Management. Managing packages and generations.
+* Licenses: Emacs Licenses. Interface for licenses of Guix packages.
* Popup Interface: Emacs Popup Interface. Magit-like interface for guix commands.
* Prettify Mode: Emacs Prettify. Abbreviating @file{/gnu/store/@dots{}} file names.
* Build Log Mode: Emacs Build Log. Highlighting Guix build logs.
diff --git a/emacs/guix-license.el b/emacs/guix-license.el
index a28b45e..5904979 100644
--- a/emacs/guix-license.el
+++ b/emacs/guix-license.el
@@ -23,22 +23,108 @@
;;; Code:
+(require 'guix-buffer)
+(require 'guix-list)
+(require 'guix-info)
(require 'guix-read)
(require 'guix-backend)
(require 'guix-guile)
+(guix-define-entry-type license)
+
(defun guix-license-name->url (license)
"Return URL of a LICENSE."
(or (guix-eval-read (guix-make-guile-expression
'license-name->uri license))
(error "Hm, I don't know URL of '%s' license" license)))
+(defun guix-license-get-entries (search-type &rest args)
+ "Receive 'license' entries.
+SEARCH-TYPE may be one of the following symbols: `all', `id', `name'."
+ (guix-eval-read
+ (apply #'guix-make-guile-expression
+ 'license-entries search-type args)))
+
+(defun guix-license-get-display (search-type &rest args)
+ "Search for licenses and show results."
+ (apply #'guix-list-get-display-entries
+ 'license search-type args))
+
+\f
+;;; License 'info'
+
+(guix-info-define-interface license
+ :buffer-name "*Guix License Info*"
+ :get-entries-function 'guix-license-get-entries
+ :format '((name ignore (simple guix-info-heading))
+ ignore
+ guix-license-insert-packages-button
+ (url ignore (simple guix-url))
+ guix-license-insert-comment)
+ :titles '((url . "URL")))
+
+(declare-function guix-packages-by-license "guix-ui-package")
+
+(defun guix-license-insert-packages-button (entry)
+ "Insert button to display packages by license ENTRY."
+ (guix-info-insert-action-button
+ "Packages"
+ (lambda (btn)
+ (guix-packages-by-license (button-get btn 'license)))
+ "Show packages with this license"
+ 'license (guix-entry-value entry 'name)))
+
+(defun guix-license-insert-comment (entry)
+ "Insert 'comment' of a license ENTRY."
+ (let ((comment (guix-entry-value entry 'comment)))
+ (if (and comment
+ (string-match-p "^http" comment))
+ (guix-info-insert-value-simple comment 'guix-url)
+ (guix-info-insert-title-simple
+ (guix-info-param-title 'license 'comment))
+ (guix-info-insert-value-indent comment))))
+
+\f
+;;; License 'list'
+
+(guix-list-define-interface license
+ :buffer-name "*Guix Licenses*"
+ :get-entries-function 'guix-license-get-entries
+ :describe-function 'guix-license-list-describe
+ :format '((name nil 40 t)
+ (url guix-list-get-url 50 t))
+ :titles '((name . "License"))
+ :sort-key '(name))
+
+(let ((map guix-license-list-mode-map))
+ (define-key map (kbd "RET") 'guix-license-list-show-packages))
+
+(defun guix-license-list-describe (ids)
+ "Describe licenses with IDS (list of identifiers)."
+ (guix-buffer-display-entries
+ (guix-entries-by-ids ids (guix-buffer-current-entries))
+ 'info 'license (cl-list* 'id ids) 'add))
+
+(defun guix-license-list-show-packages ()
+ "Display packages with the license at point."
+ (interactive)
+ (guix-packages-by-license (guix-list-current-id)))
+
+\f
+;;; Interactive commands
+
;;;###autoload
(defun guix-browse-license-url (license)
"Browse URL of a LICENSE."
(interactive (list (guix-read-license-name)))
(browse-url (guix-license-name->url license)))
+;;;###autoload
+(defun guix-licenses ()
+ "Display licenses of the Guix packages."
+ (interactive)
+ (guix-license-get-display 'all))
+
(provide 'guix-license)
;;; guix-license.el ends here
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index c39501d..b2f307a 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -1071,3 +1071,25 @@ Return #t if the shell command was executed successfully."
(define (license-name->uri name)
(and=> (license-name->license name)
license-uri))
+
+(define %license-param-alist
+ `((id . ,license-name)
+ (name . ,license-name)
+ (url . ,license-uri)
+ (comment . ,license-comment)))
+
+(define license->sexp
+ (object-transformer %license-param-alist))
+
+(define (find-licenses search-type . search-values)
+ "Return a list of licenses depending on SEARCH-TYPE and SEARCH-VALUES."
+ (case search-type
+ ((id name)
+ (let ((names search-values))
+ (filter-map license-name->license names)))
+ ((all)
+ %licenses)))
+
+(define (license-entries search-type . search-values)
+ (map license->sexp
+ (apply find-licenses search-type search-values)))
--
2.7.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 1/7] emacs: Rename 'file-path' to 'file-name'.
2016-01-22 8:19 ` [PATCH 1/7] emacs: Rename 'file-path' to 'file-name' Alex Kost
@ 2016-01-23 17:06 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:06 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-info.el (guix-info-file-path): Rename to...
> (guix-info-file-name): ... this.
> * emacs/guix-list.el (guix-list-file-path): Rename to...
> (guix-list-file-name): ... this.
> (guix-list-get-file-path): Rename to...
> (guix-list-get-file-name): ... this.
> * emacs/guix-ui-generation.el (guix-generation-list-format): Adjust
> accordingly.
> * emacs/guix-ui-system-generation.el (guix-system-generation-list-format):
> Likewise.
> * NEWS: Mention faces renaming.
I support the change! :-)
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 2/7] licenses: Add a list of licenses.
2016-01-22 8:19 ` [PATCH 2/7] licenses: Add a list of licenses Alex Kost
@ 2016-01-23 17:08 ` Ludovic Courtès
2016-01-23 22:37 ` Alex Kost
0 siblings, 1 reply; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:08 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * guix/licenses.scm (%licenses): New variable.
For the purposes of this patch set, I think we’d rather avoid that, and
instead do something like:
(module-map (lambda (sym var)
(variable-ref var))
(resolve-interface '(guix licenses)))
WDYT?
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-22 8:19 ` [PATCH 3/7] emacs: Add 'guix-browse-license-url' command Alex Kost
@ 2016-01-23 17:13 ` Ludovic Courtès
2016-01-25 19:18 ` Alex Kost
2016-01-23 17:18 ` Ludovic Courtès
1 sibling, 1 reply; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:13 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-main.scm (license-names, license-name->license)
> (license-name->uri): New procedures.
> * emacs/guix-read.el (guix-license-names, guix-read-license-name): New
> procedures.
> * emacs/guix-license.el: New file.
> * emacs.am (ELFILES): Add it.
[...]
> +;;; Licenses
I’d do:
(define %licenses
(delay (module-map thing from previous message…)))
> +(define (license-names)
> + "Return a list of names of available licenses."
> + (map license-name %licenses))
So here it’d become: (force %licenses).
Other than that, LGTM!
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 4/7] emacs: Buttonize licenses in "Package Info".
2016-01-22 8:19 ` [PATCH 4/7] emacs: Buttonize licenses in "Package Info" Alex Kost
@ 2016-01-23 17:14 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:14 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-ui-package.el (guix-package-license): New button type.
> (guix-package-info-format, guix-output-info-format): Use it.
> * doc/emacs.texi (Emacs Info buffer): Mention it.
OK!
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 5/7] emacs: Add 'guix-packages-by-license' command.
2016-01-22 8:19 ` [PATCH 5/7] emacs: Add 'guix-packages-by-license' command Alex Kost
@ 2016-01-23 17:15 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:15 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-main.scm (packages-by-license): New procedure.
> (%patterns-makers): Add 'license' search type.
> * emacs/guix-messages.el (guix-message-packages-by-license): New procedure.
> (guix-messages): Use it.
> * emacs/guix-ui-package.el (guix-packages-by-license): New command.
> * doc/emacs.texi (Emacs Commands): Document it.
OK!
Ludo'.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/7] emacs: list: Support displaying URL links.
2016-01-22 8:19 ` [PATCH 6/7] emacs: list: Support displaying URL links Alex Kost
@ 2016-01-23 17:15 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:15 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-list.el (guix-list-url): New face.
> (guix-list-get-url): New procedure.
OK
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 7/7] emacs: Add interface for licenses.
2016-01-22 8:19 ` [PATCH 7/7] emacs: Add interface for licenses Alex Kost
@ 2016-01-23 17:17 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:17 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> * emacs/guix-main.scm (%license-param-alist): New variable.
> (license->sexp, find-licenses, license-entries): New procedures.
> * emacs/guix-license.el (guix-license-get-entries)
> (guix-license-get-display, guix-license-insert-packages-button)
> (guix-license-insert-comment, guix-license-list-describe)
> (guix-license-list-show-packages): New procedures.
> (guix-licenses): New command.
> * doc/emacs.texi (Emacs Licenses): New node.
> (Emacs Interface): Add it.
> * doc/guix.texi (Top): Add it.
> * NEWS: Mention new interface.
[...]
> +@node Emacs Licenses
> +@section Licenses
> +
> +If you want to browse an URL of a particular license, or to look at a
s/an URL/the URL/
> +list of licenses, you may use the following commands:
> +
> +@table @kbd
> +
> +@item M-x guix-browse-license-url
> +Choose a license from a completion list to browse its URL using
> +@code{browse-url} function (@pxref{Browse-URL,,, emacs, The GNU Emacs
> +Manual}).
> +
> +@item M-x guix-licenses
> +Display a list of available licenses. You can press @kbd{@key{RET}}
> +there to display packages with this license in the same way as @kbd{M-x
> +guix-packages-by-license} would do (@pxref{Emacs Commands}).
> +
> +@end table
Otherwise LGTM! This is going to be very useful for packagers.
Thank you for the great idea!
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-22 8:19 ` [PATCH 3/7] emacs: Add 'guix-browse-license-url' command Alex Kost
2016-01-23 17:13 ` Ludovic Courtès
@ 2016-01-23 17:18 ` Ludovic Courtès
2016-01-23 22:49 ` Alex Kost
1 sibling, 1 reply; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-23 17:18 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> +(define license-name->license
I just realized that I’d rather call it ‘lookup-license’ for
consistency, because it’s not a conversion.
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 2/7] licenses: Add a list of licenses.
2016-01-23 17:08 ` Ludovic Courtès
@ 2016-01-23 22:37 ` Alex Kost
2016-01-24 20:59 ` Ludovic Courtès
0 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-23 22:37 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guix-devel
Ludovic Courtès (2016-01-23 20:08 +0300) wrote:
> Alex Kost <alezost@gmail.com> skribis:
>
>> * guix/licenses.scm (%licenses): New variable.
>
> For the purposes of this patch set, I think we’d rather avoid that, and
> instead do something like:
>
> (module-map (lambda (sym var)
> (variable-ref var))
> (resolve-interface '(guix licenses)))
>
> WDYT?
Oh, great, I didn't know about 'module-map', thanks! But since there
are also things like 'license?' or 'license-uri' in this module, we need
to ignore objects which are not licenses. Would it be ok to do it like
this:
(hash-fold (lambda (sym var res)
(let ((object (variable-ref var)))
(if (license? object)
(cons object res)
res)))
'()
(module-obarray (resolve-interface '(guix licenses))))
or is there a more idiomatic way?
--
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-23 17:18 ` Ludovic Courtès
@ 2016-01-23 22:49 ` Alex Kost
2016-01-24 21:00 ` Ludovic Courtès
0 siblings, 1 reply; 21+ messages in thread
From: Alex Kost @ 2016-01-23 22:49 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guix-devel
Ludovic Courtès (2016-01-23 20:18 +0300) wrote:
> Alex Kost <alezost@gmail.com> skribis:
>
>> +(define license-name->license
>
> I just realized that I’d rather call it ‘lookup-license’ for
> consistency, because it’s not a conversion.
OK, I'll rename it, and what about:
(define (license-name->uri name)
(and=> (license-name->license name)
license-uri))
Should it be called ‘lookup-license-uri’ maybe?
--
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 2/7] licenses: Add a list of licenses.
2016-01-23 22:37 ` Alex Kost
@ 2016-01-24 20:59 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-24 20:59 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> Ludovic Courtès (2016-01-23 20:08 +0300) wrote:
>
>> Alex Kost <alezost@gmail.com> skribis:
>>
>>> * guix/licenses.scm (%licenses): New variable.
>>
>> For the purposes of this patch set, I think we’d rather avoid that, and
>> instead do something like:
>>
>> (module-map (lambda (sym var)
>> (variable-ref var))
>> (resolve-interface '(guix licenses)))
>>
>> WDYT?
>
> Oh, great, I didn't know about 'module-map', thanks! But since there
> are also things like 'license?' or 'license-uri' in this module, we need
> to ignore objects which are not licenses. Would it be ok to do it like
> this:
>
> (hash-fold (lambda (sym var res)
> (let ((object (variable-ref var)))
> (if (license? object)
> (cons object res)
> res)))
> '()
> (module-obarray (resolve-interface '(guix licenses))))
>
> or is there a more idiomatic way?
Good point. I’d rather write it as:
(filter license? (module-map …))
(‘module-obarray’ is an implementation detail that may not be here
forever.)
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-23 22:49 ` Alex Kost
@ 2016-01-24 21:00 ` Ludovic Courtès
0 siblings, 0 replies; 21+ messages in thread
From: Ludovic Courtès @ 2016-01-24 21:00 UTC (permalink / raw)
To: Alex Kost; +Cc: guix-devel
Alex Kost <alezost@gmail.com> skribis:
> Ludovic Courtès (2016-01-23 20:18 +0300) wrote:
>
>> Alex Kost <alezost@gmail.com> skribis:
>>
>>> +(define license-name->license
>>
>> I just realized that I’d rather call it ‘lookup-license’ for
>> consistency, because it’s not a conversion.
>
> OK, I'll rename it, and what about:
>
> (define (license-name->uri name)
> (and=> (license-name->license name)
> license-uri))
>
> Should it be called ‘lookup-license-uri’ maybe?
Sounds good.
Ludo’.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 3/7] emacs: Add 'guix-browse-license-url' command.
2016-01-23 17:13 ` Ludovic Courtès
@ 2016-01-25 19:18 ` Alex Kost
0 siblings, 0 replies; 21+ messages in thread
From: Alex Kost @ 2016-01-25 19:18 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guix-devel
Ludovic Courtès (2016-01-23 20:13 +0300) wrote:
> Alex Kost <alezost@gmail.com> skribis:
>
>> * emacs/guix-main.scm (license-names, license-name->license)
>> (license-name->uri): New procedures.
>> * emacs/guix-read.el (guix-license-names, guix-read-license-name): New
>> procedures.
>> * emacs/guix-license.el: New file.
>> * emacs.am (ELFILES): Add it.
>
> [...]
>
>> +;;; Licenses
>
> I’d do:
>
> (define %licenses
> (delay (module-map thing from previous message…)))
>
>> +(define (license-names)
>> + "Return a list of names of available licenses."
>> + (map license-name %licenses))
>
> So here it’d become: (force %licenses).
>
> Other than that, LGTM!
I used delay/force and "(filter license? (module-map …))" advice from
the other message and pushed this patchset. Thank you for your very
useful and informative comments!
--
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2016-01-25 19:18 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-22 8:19 [PATCH 0/7]: Add "M-x guix-licenses" and friends Alex Kost
2016-01-22 8:19 ` [PATCH 1/7] emacs: Rename 'file-path' to 'file-name' Alex Kost
2016-01-23 17:06 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 2/7] licenses: Add a list of licenses Alex Kost
2016-01-23 17:08 ` Ludovic Courtès
2016-01-23 22:37 ` Alex Kost
2016-01-24 20:59 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 3/7] emacs: Add 'guix-browse-license-url' command Alex Kost
2016-01-23 17:13 ` Ludovic Courtès
2016-01-25 19:18 ` Alex Kost
2016-01-23 17:18 ` Ludovic Courtès
2016-01-23 22:49 ` Alex Kost
2016-01-24 21:00 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 4/7] emacs: Buttonize licenses in "Package Info" Alex Kost
2016-01-23 17:14 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 5/7] emacs: Add 'guix-packages-by-license' command Alex Kost
2016-01-23 17:15 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 6/7] emacs: list: Support displaying URL links Alex Kost
2016-01-23 17:15 ` Ludovic Courtès
2016-01-22 8:19 ` [PATCH 7/7] emacs: Add interface for licenses Alex Kost
2016-01-23 17:17 ` Ludovic Courtès
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.