mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
emacs: Add interface for package locations.
* emacs/guix-main.scm (%package-location-param-alist): New variable. (package-location->sexp, package-location-entries): New procedures. * emacs/guix-ui-location.el: New file. * emacs.am (ELFILES): Add it. * doc/emacs.texi (Emacs Package Locations): Document 'guix-locations'. * NEWS: Mention it.
This commit is contained in:
parent
b5e3cbbb24
commit
b4b9975d4a
5 changed files with 109 additions and 0 deletions
6
NEWS
6
NEWS
|
@ -10,6 +10,12 @@ Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
|
||||||
Please send Guix bug reports to bug-guix@gnu.org.
|
Please send Guix bug reports to bug-guix@gnu.org.
|
||||||
|
|
||||||
|
* Changes in 0.11.0 (since 0.10.0)
|
||||||
|
|
||||||
|
** Package management
|
||||||
|
|
||||||
|
*** New Emacs interface for package locations: M-x guix-locations
|
||||||
|
|
||||||
* Changes in 0.10.0 (since 0.9.0)
|
* Changes in 0.10.0 (since 0.9.0)
|
||||||
|
|
||||||
** Community
|
** Community
|
||||||
|
|
|
@ -556,6 +556,13 @@ get lost in these locations:
|
||||||
|
|
||||||
@table @kbd
|
@table @kbd
|
||||||
|
|
||||||
|
@item M-x guix-locations
|
||||||
|
Display a list of package locations. You can press @key{RET} there to
|
||||||
|
display packages placed in the current location in the same way as
|
||||||
|
@kbd{M-x guix-packages-by-location} would do (@pxref{Emacs Commands}).
|
||||||
|
Note that when the point is on a location button, @key{RET} will open
|
||||||
|
this location file.
|
||||||
|
|
||||||
@item M-x guix-find-location
|
@item M-x guix-find-location
|
||||||
Open the given package definition source file (press @key{TAB} to choose
|
Open the given package definition source file (press @key{TAB} to choose
|
||||||
a location from a completion list).
|
a location from a completion list).
|
||||||
|
|
1
emacs.am
1
emacs.am
|
@ -49,6 +49,7 @@ ELFILES = \
|
||||||
emacs/guix-read.el \
|
emacs/guix-read.el \
|
||||||
emacs/guix-ui.el \
|
emacs/guix-ui.el \
|
||||||
emacs/guix-ui-license.el \
|
emacs/guix-ui-license.el \
|
||||||
|
emacs/guix-ui-location.el \
|
||||||
emacs/guix-ui-package.el \
|
emacs/guix-ui-package.el \
|
||||||
emacs/guix-ui-generation.el \
|
emacs/guix-ui-generation.el \
|
||||||
emacs/guix-ui-system-generation.el \
|
emacs/guix-ui-system-generation.el \
|
||||||
|
|
|
@ -1127,3 +1127,15 @@ (define-values (packages-by-location-file
|
||||||
(lambda ()
|
(lambda ()
|
||||||
"Return the list of file names of all package locations."
|
"Return the list of file names of all package locations."
|
||||||
(force files)))))
|
(force files)))))
|
||||||
|
|
||||||
|
(define %package-location-param-alist
|
||||||
|
`((id . ,identity)
|
||||||
|
(location . ,identity)
|
||||||
|
(number-of-packages . ,(lambda (location)
|
||||||
|
(length (packages-by-location-file location))))))
|
||||||
|
|
||||||
|
(define package-location->sexp
|
||||||
|
(object-transformer %package-location-param-alist))
|
||||||
|
|
||||||
|
(define (package-location-entries)
|
||||||
|
(map package-location->sexp (package-location-files)))
|
||||||
|
|
83
emacs/guix-ui-location.el
Normal file
83
emacs/guix-ui-location.el
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
;;; guix-ui-location.el --- Interface for displaying package locations
|
||||||
|
|
||||||
|
;; 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 Location as published by
|
||||||
|
;; the Free Software Foundation, either version 3 of the Location, 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 Location for more details.
|
||||||
|
|
||||||
|
;; You should have received a copy of the GNU General Public Location
|
||||||
|
;; along with this program. If not, see <http://www.gnu.org/locations/>.
|
||||||
|
|
||||||
|
;;; Commentary:
|
||||||
|
|
||||||
|
;; This file provides a 'list' interface for displaying locations of Guix
|
||||||
|
;; packages.
|
||||||
|
|
||||||
|
;;; Code:
|
||||||
|
|
||||||
|
(require 'guix-buffer)
|
||||||
|
(require 'guix-list)
|
||||||
|
(require 'guix-location)
|
||||||
|
(require 'guix-backend)
|
||||||
|
|
||||||
|
(guix-define-entry-type location)
|
||||||
|
|
||||||
|
(defun guix-location-get-entries ()
|
||||||
|
"Receive 'package location' entries."
|
||||||
|
(guix-eval-read "(package-location-entries)"))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Location 'list'
|
||||||
|
|
||||||
|
(guix-list-define-interface location
|
||||||
|
:buffer-name "*Guix Package Locations*"
|
||||||
|
:get-entries-function 'guix-location-get-entries
|
||||||
|
:format '((location guix-location-list-file-name-specification 50 t)
|
||||||
|
(number-of-packages nil 10 guix-list-sort-numerically-1
|
||||||
|
:right-align t))
|
||||||
|
:sort-key '(location))
|
||||||
|
|
||||||
|
(let ((map guix-location-list-mode-map))
|
||||||
|
(define-key map (kbd "RET") 'guix-location-list-show-packages)
|
||||||
|
;; "Location Info" buffer is not defined (it would be useless), so
|
||||||
|
;; unbind "i" key (by default, it is used to display Info buffer).
|
||||||
|
(define-key map (kbd "i") nil))
|
||||||
|
|
||||||
|
(defun guix-location-list-file-name-specification (location &optional _)
|
||||||
|
"Return LOCATION button specification for `tabulated-list-entries'."
|
||||||
|
(list location
|
||||||
|
'face 'guix-list-file-name
|
||||||
|
'action (lambda (btn)
|
||||||
|
(guix-find-location (button-get btn 'location)))
|
||||||
|
'follow-link t
|
||||||
|
'help-echo (concat "Find location: " location)
|
||||||
|
'location location))
|
||||||
|
|
||||||
|
(declare-function guix-packages-by-location "guix-ui-package")
|
||||||
|
|
||||||
|
(defun guix-location-list-show-packages ()
|
||||||
|
"Display packages placed in the location at point."
|
||||||
|
(interactive)
|
||||||
|
(guix-packages-by-location (guix-list-current-id)))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Interactive commands
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun guix-locations ()
|
||||||
|
"Display locations of the Guix packages."
|
||||||
|
(interactive)
|
||||||
|
(guix-list-get-display-entries 'location))
|
||||||
|
|
||||||
|
(provide 'guix-ui-location)
|
||||||
|
|
||||||
|
;;; guix-ui-location.el ends here
|
Loading…
Reference in a new issue