[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
07/09: emacs: Add interface for package locations.
From: |
Alex Kost |
Subject: |
07/09: emacs: Add interface for package locations. |
Date: |
Mon, 18 Apr 2016 07:13:37 +0000 |
alezost pushed a commit to branch master
in repository guix.
commit b4b9975d4abf8ee7d4f3762e5e6aea656cbeb61f
Author: Alex Kost <address@hidden>
Date: Fri Apr 1 23:53:20 2016 +0300
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.
---
NEWS | 6 +++
doc/emacs.texi | 7 ++++
emacs.am | 1 +
emacs/guix-main.scm | 12 ++++++
emacs/guix-ui-location.el | 83 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/NEWS b/NEWS
index 2ab208f..267c197 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,12 @@ Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès
<address@hidden>
Please send Guix bug reports to address@hidden
+* 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)
** Community
diff --git a/doc/emacs.texi b/doc/emacs.texi
index a4f77a1..ed8896a 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -556,6 +556,13 @@ get lost in these locations:
@table @kbd
address@hidden 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
address@hidden 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
Open the given package definition source file (press @key{TAB} to choose
a location from a completion list).
diff --git a/emacs.am b/emacs.am
index f0647d1..62e33e4 100644
--- a/emacs.am
+++ b/emacs.am
@@ -49,6 +49,7 @@ ELFILES = \
emacs/guix-read.el \
emacs/guix-ui.el \
emacs/guix-ui-license.el \
+ emacs/guix-ui-location.el \
emacs/guix-ui-package.el \
emacs/guix-ui-generation.el \
emacs/guix-ui-system-generation.el \
diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 4780cce..5358f3b 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -1127,3 +1127,15 @@ Return #t if the shell command was executed
successfully."
(lambda ()
"Return the list of file names of all package locations."
(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)))
diff --git a/emacs/guix-ui-location.el b/emacs/guix-ui-location.el
new file mode 100644
index 0000000..0027c1f
--- /dev/null
+++ b/emacs/guix-ui-location.el
@@ -0,0 +1,83 @@
+;;; guix-ui-location.el --- Interface for displaying package locations
+
+;; Copyright © 2016 Alex Kost <address@hidden>
+
+;; 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
- branch master updated (9bb46c1 -> a7c6178), Alex Kost, 2016/04/18
- 05/09: emacs: Make 'guix-find-location' interactive., Alex Kost, 2016/04/18
- 03/09: emacs: Separate package license code., Alex Kost, 2016/04/18
- 09/09: emacs: Display license info on button press in Package Info buffer., Alex Kost, 2016/04/18
- 01/09: emacs: Add 'guix-packages-by-location' command., Alex Kost, 2016/04/18
- 06/09: doc: emacs: Add "Package Source Locations" section., Alex Kost, 2016/04/18
- 08/09: emacs: Add location "Packages" button to Package Info buffer., Alex Kost, 2016/04/18
- 07/09: emacs: Add interface for package locations.,
Alex Kost <=
- 02/09: emacs: Separate package location code., Alex Kost, 2016/04/18
- 04/09: emacs: Display message if license not found., Alex Kost, 2016/04/18