diff options
Diffstat (limited to 'emacs')
-rw-r--r-- | emacs/guix-license.el | 21 | ||||
-rw-r--r-- | emacs/guix-ui-license.el | 22 |
2 files changed, 42 insertions, 1 deletions
diff --git a/emacs/guix-license.el b/emacs/guix-license.el index 940f5518e2..6003a21aac 100644 --- a/emacs/guix-license.el +++ b/emacs/guix-license.el @@ -27,6 +27,12 @@ (require 'guix-backend) (require 'guix-guile) +(defun guix-license-file (&optional directory) + "Return name of the file with license definitions. +DIRECTORY is a directory with Guix source (`guix-directory' by default)." + (expand-file-name "guix/licenses.scm" + (or directory guix-directory))) + (defun guix-lookup-license-url (license) "Return URL of a LICENSE." (or (guix-eval-read (guix-make-guile-expression @@ -34,6 +40,21 @@ (error "Hm, I don't know URL of '%s' license" license))) ;;;###autoload +(defun guix-find-license-definition (license &optional directory) + "Open licenses file from DIRECTORY and move to the LICENSE definition. +See `guix-license-file' for the meaning of DIRECTORY. +Interactively, with prefix argument, prompt for DIRECTORY." + (interactive + (list (guix-read-license-name) + (guix-read-directory))) + (find-file (guix-license-file directory)) + (goto-char (point-min)) + (when (re-search-forward (concat "\"" (regexp-quote license) "\"") + nil t) + (beginning-of-defun) + (recenter 1))) + +;;;###autoload (defun guix-browse-license-url (license) "Browse URL of a LICENSE." (interactive (list (guix-read-license-name))) diff --git a/emacs/guix-ui-license.el b/emacs/guix-ui-license.el index ab1d25bfd2..cf1b5cd357 100644 --- a/emacs/guix-ui-license.el +++ b/emacs/guix-ui-license.el @@ -29,6 +29,7 @@ (require 'guix-info) (require 'guix-backend) (require 'guix-guile) +(require 'guix-license) (guix-define-entry-type license) @@ -64,7 +65,9 @@ SEARCH-TYPE may be one of the following symbols: `all', `id', `name'." ignore guix-license-insert-packages-button (url ignore (simple guix-url)) - guix-license-insert-comment) + guix-license-insert-comment + ignore + guix-license-insert-file) :titles '((url . "URL"))) (declare-function guix-packages-by-license "guix-ui-package") @@ -89,6 +92,16 @@ SEARCH-TYPE may be one of the following symbols: `all', `id', `name'." (guix-info-param-title 'license 'comment)) (guix-info-insert-value-indent comment)))) +(defun guix-license-insert-file (entry) + "Insert button to open license definition." + (let ((license (guix-entry-value entry 'name))) + (guix-insert-button + (guix-license-file) 'guix-file + 'help-echo (format "Open definition of license '%s'" license) + 'action (lambda (btn) + (guix-find-license-definition (button-get btn 'license))) + 'license license))) + ;;; License 'list' @@ -103,6 +116,7 @@ SEARCH-TYPE may be one of the following symbols: `all', `id', `name'." :sort-key '(name)) (let ((map guix-license-list-mode-map)) + (define-key map (kbd "e") 'guix-license-list-edit) (define-key map (kbd "RET") 'guix-license-list-show-packages)) (defun guix-license-list-describe (ids) @@ -116,6 +130,12 @@ SEARCH-TYPE may be one of the following symbols: `all', `id', `name'." (interactive) (guix-packages-by-license (guix-list-current-id))) +(defun guix-license-list-edit (&optional directory) + "Go to the location of the current license definition. +See `guix-license-file' for the meaning of DIRECTORY." + (interactive (list (guix-read-directory))) + (guix-find-license-definition (guix-list-current-id) directory)) + ;;; Interactive commands |