aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/emacs.texi3
-rw-r--r--emacs/guix-base.el27
-rw-r--r--emacs/guix-ui-package.el19
3 files changed, 34 insertions, 15 deletions
diff --git a/doc/emacs.texi b/doc/emacs.texi
index d46c17c4a0..dbe59f0243 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -240,6 +240,9 @@ this:
@kbd{M-x guix-edit guix} opens
@file{~/src/guix/gnu/packages/package-management.scm} file.
+Also you can use @kbd{C-u} prefix argument to specify a directory just
+for the current @kbd{M-x guix-edit} command.
+
@node Emacs General info
@subsection General information
diff --git a/emacs/guix-base.el b/emacs/guix-base.el
index 9f9f258451..1248ecbce5 100644
--- a/emacs/guix-base.el
+++ b/emacs/guix-base.el
@@ -55,6 +55,14 @@
If it is not set by a user, it is set after starting Guile REPL.
This directory is used to define location of the packages.")
+(defun guix-read-directory ()
+ "Return `guix-directory' or prompt for it.
+This function is intended for using in `interactive' forms."
+ (if current-prefix-arg
+ (read-directory-name "Directory with Guix modules: "
+ guix-directory)
+ guix-directory))
+
(defun guix-set-directory ()
"Set `guix-directory' if needed."
(or guix-directory
@@ -63,17 +71,17 @@ This directory is used to define location of the packages.")
(add-hook 'guix-after-start-repl-hook 'guix-set-directory)
-(defun guix-find-location (location)
+(defun guix-find-location (location &optional directory)
"Go to LOCATION of a package.
LOCATION is a string of the form:
\"PATH:LINE:COLUMN\"
If PATH is relative, it is considered to be relative to
-`guix-directory'."
+DIRECTORY (`guix-directory' by default)."
(cl-multiple-value-bind (path line col)
(split-string location ":")
- (let ((file (expand-file-name path guix-directory))
+ (let ((file (expand-file-name path (or directory guix-directory)))
(line (string-to-number line))
(col (string-to-number col)))
(find-file file)
@@ -113,12 +121,17 @@ See `guix-packages-profile'."
(guix-packages-profile profile generation system?)))
;;;###autoload
-(defun guix-edit (id-or-name)
- "Edit (go to location of) package with ID-OR-NAME."
- (interactive (list (guix-read-package-name)))
+(defun guix-edit (id-or-name &optional directory)
+ "Edit (go to location of) package with ID-OR-NAME.
+See `guix-find-location' for the meaning of package location and
+DIRECTORY.
+Interactively, with prefix argument, prompt for DIRECTORY."
+ (interactive
+ (list (guix-read-package-name)
+ (guix-read-directory)))
(let ((loc (guix-package-location id-or-name)))
(if loc
- (guix-find-location loc)
+ (guix-find-location loc directory)
(message "Couldn't find package location."))))
diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el
index 0971fdd438..ff10a1e75c 100644
--- a/emacs/guix-ui-package.el
+++ b/emacs/guix-ui-package.el
@@ -746,10 +746,11 @@ The specification is suitable for `guix-process-package-actions'."
(let ((specs (guix-list-get-marked-args action-type)))
(and specs (cons action-type specs))))
-(defun guix-package-list-edit ()
- "Go to the location of the current package."
- (interactive)
- (guix-edit (guix-list-current-id)))
+(defun guix-package-list-edit (&optional directory)
+ "Go to the location of the current package.
+See `guix-find-location' for the meaning of DIRECTORY."
+ (interactive (list (guix-read-directory)))
+ (guix-edit (guix-list-current-id) directory))
(defun guix-package-list-latest-builds (number &rest args)
"Display latest NUMBER of Hydra builds of the current package.
@@ -906,11 +907,13 @@ See `guix-package-info-type'."
'id (cl-remove-duplicates pids))
'add))))
-(defun guix-output-list-edit ()
- "Go to the location of the current package."
- (interactive)
+(defun guix-output-list-edit (&optional directory)
+ "Go to the location of the current package.
+See `guix-find-location' for the meaning of DIRECTORY."
+ (interactive (list (guix-read-directory)))
(guix-edit (guix-entry-value (guix-list-current-entry)
- 'package-id)))
+ 'package-id)
+ directory))
;;; Interactive commands