diff options
author | Alex Kost <alezost@gmail.com> | 2016-05-15 11:10:04 +0300 |
---|---|---|
committer | Alex Kost <alezost@gmail.com> | 2016-05-31 23:51:54 +0300 |
commit | e98316e69f2480bde709d92ec00db66fd8e66aea (patch) | |
tree | dd6f3ca6ed3efc45b414cf0bb3fadeaff57632e8 /emacs/guix-ui-package.el | |
parent | 65e5fe54bae67fbd6de225fd8cc909401045a099 (diff) | |
download | guix-e98316e69f2480bde709d92ec00db66fd8e66aea.tar.gz |
emacs: Add "Build" button to Package Info.
* emacs/guix-main.scm: Use (guix scripts) module for 'build-package' procedure. * emacs/guix-base.el (guix-build-package): New procedure. * emacs/guix-ui-package.el (guix-package-info-insert-build-button): New procedure. (guix-package-info-button-functions): New variable. (guix-package-info-insert-misc): Insert buttons using it.
Diffstat (limited to 'emacs/guix-ui-package.el')
-rw-r--r-- | emacs/guix-ui-package.el | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el index eebecc7077..4eb70831dd 100644 --- a/emacs/guix-ui-package.el +++ b/emacs/guix-ui-package.el @@ -332,6 +332,13 @@ prompt depending on `guix-operation-confirm' variable)." :type 'boolean :group 'guix-package-info) +(defcustom guix-package-info-button-functions + '(guix-package-info-insert-build-button) + "List of functions used to insert package buttons in Info buffer. +Each function is called with 2 arguments: package ID and full name." + :type '(repeat function) + :group 'guix-package-info) + (defvar guix-package-info-download-buffer nil "Buffer from which a current download operation was performed.") @@ -558,6 +565,7 @@ PACKAGE-ID is an ID of the package which store path to show." (let* ((entry-id (guix-entry-id entry)) (package-id (or (guix-entry-value entry 'package-id) entry-id)) + (full-name (guix-package-entry->name-specification entry)) (store-path (guix-entry-value entry 'store-path))) (guix-info-insert-title-simple "Package") (if store-path @@ -570,7 +578,25 @@ PACKAGE-ID is an ID of the package which store path to show." (button-get btn 'package-id))) "Show the store directory of the current package" 'entry-id entry-id - 'package-id package-id))))) + 'package-id package-id)) + (when guix-package-info-button-functions + (insert "\n") + (guix-mapinsert (lambda (fun) + (funcall fun package-id full-name)) + guix-package-info-button-functions + (guix-info-get-indent) + :indent guix-info-indent + :column (guix-info-fill-column)))))) + +(defun guix-package-info-insert-build-button (id full-name) + "Insert button to build a package defined by ID." + (guix-info-insert-action-button + "Build" + (lambda (btn) + (guix-build-package (button-get btn 'id) + (format "Build '%s' package?" full-name))) + (format "Build the current package") + 'id id)) (defun guix-package-info-show-source (entry-id package-id) "Show file name of a package source in the current info buffer. |