emacs: 'C-u M-x guix-edit' prompts for directory.
* emacs/guix-base.el (guix-read-directory): New procedure. (guix-find-location, guix-edit): Add optional 'directory' argument. * emacs/guix-ui-package.el (guix-package-list-edit) (guix-output-list-edit): Likewise. * doc/emacs.texi (Emacs Commands): Mention "C-u".
This commit is contained in:
parent
f1957fc145
commit
2c04e2eec8
|
@ -240,6 +240,9 @@ this:
|
||||||
@kbd{M-x guix-edit guix} opens
|
@kbd{M-x guix-edit guix} opens
|
||||||
@file{~/src/guix/gnu/packages/package-management.scm} file.
|
@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
|
@node Emacs General info
|
||||||
@subsection General information
|
@subsection General information
|
||||||
|
|
|
@ -55,6 +55,14 @@
|
||||||
If it is not set by a user, it is set after starting Guile REPL.
|
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.")
|
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 ()
|
(defun guix-set-directory ()
|
||||||
"Set `guix-directory' if needed."
|
"Set `guix-directory' if needed."
|
||||||
(or guix-directory
|
(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)
|
(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.
|
"Go to LOCATION of a package.
|
||||||
LOCATION is a string of the form:
|
LOCATION is a string of the form:
|
||||||
|
|
||||||
\"PATH:LINE:COLUMN\"
|
\"PATH:LINE:COLUMN\"
|
||||||
|
|
||||||
If PATH is relative, it is considered to be relative to
|
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)
|
(cl-multiple-value-bind (path line col)
|
||||||
(split-string location ":")
|
(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))
|
(line (string-to-number line))
|
||||||
(col (string-to-number col)))
|
(col (string-to-number col)))
|
||||||
(find-file file)
|
(find-file file)
|
||||||
|
@ -113,12 +121,17 @@ See `guix-packages-profile'."
|
||||||
(guix-packages-profile profile generation system?)))
|
(guix-packages-profile profile generation system?)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun guix-edit (id-or-name)
|
(defun guix-edit (id-or-name &optional directory)
|
||||||
"Edit (go to location of) package with ID-OR-NAME."
|
"Edit (go to location of) package with ID-OR-NAME.
|
||||||
(interactive (list (guix-read-package-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)))
|
(let ((loc (guix-package-location id-or-name)))
|
||||||
(if loc
|
(if loc
|
||||||
(guix-find-location loc)
|
(guix-find-location loc directory)
|
||||||
(message "Couldn't find package location."))))
|
(message "Couldn't find package location."))))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -746,10 +746,11 @@ The specification is suitable for `guix-process-package-actions'."
|
||||||
(let ((specs (guix-list-get-marked-args action-type)))
|
(let ((specs (guix-list-get-marked-args action-type)))
|
||||||
(and specs (cons action-type specs))))
|
(and specs (cons action-type specs))))
|
||||||
|
|
||||||
(defun guix-package-list-edit ()
|
(defun guix-package-list-edit (&optional directory)
|
||||||
"Go to the location of the current package."
|
"Go to the location of the current package.
|
||||||
(interactive)
|
See `guix-find-location' for the meaning of DIRECTORY."
|
||||||
(guix-edit (guix-list-current-id)))
|
(interactive (list (guix-read-directory)))
|
||||||
|
(guix-edit (guix-list-current-id) directory))
|
||||||
|
|
||||||
(defun guix-package-list-latest-builds (number &rest args)
|
(defun guix-package-list-latest-builds (number &rest args)
|
||||||
"Display latest NUMBER of Hydra builds of the current package.
|
"Display latest NUMBER of Hydra builds of the current package.
|
||||||
|
@ -906,11 +907,13 @@ See `guix-package-info-type'."
|
||||||
'id (cl-remove-duplicates pids))
|
'id (cl-remove-duplicates pids))
|
||||||
'add))))
|
'add))))
|
||||||
|
|
||||||
(defun guix-output-list-edit ()
|
(defun guix-output-list-edit (&optional directory)
|
||||||
"Go to the location of the current package."
|
"Go to the location of the current package.
|
||||||
(interactive)
|
See `guix-find-location' for the meaning of DIRECTORY."
|
||||||
|
(interactive (list (guix-read-directory)))
|
||||||
(guix-edit (guix-entry-value (guix-list-current-entry)
|
(guix-edit (guix-entry-value (guix-list-current-entry)
|
||||||
'package-id)))
|
'package-id)
|
||||||
|
directory))
|
||||||
|
|
||||||
|
|
||||||
;;; Interactive commands
|
;;; Interactive commands
|
||||||
|
|
Loading…
Reference in New Issue