mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
emacs: Add 'guix-pull' command.
* emacs/guix-base.el (guix-pull): New command. (guix-update-after-pull, guix-after-pull-hook): New variables. (guix-restart-repl-after-pull, guix-update-buffers-maybe-after-pull): New procedures. * emacs/guix-main.scm: Use (guix scripts pull) module. * doc/emacs.texi (Emacs Commands): Document 'guix-pull' command.
This commit is contained in:
parent
17b50485a6
commit
2d7bf94927
3 changed files with 51 additions and 4 deletions
|
@ -133,6 +133,17 @@ date/time prompt,,, org, Org Mode Manual}).
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
You can also invoke the @command{guix pull} command (@pxref{Invoking
|
||||||
|
guix pull}) from Emacs using:
|
||||||
|
|
||||||
|
@table @kbd
|
||||||
|
@item M-x guix-pull
|
||||||
|
With @kbd{C-u}, make it verbose.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
Once @command{guix pull} has succeeded, the Guix REPL is restared. This
|
||||||
|
allows you to keep using the Emacs interface with the updated Guix.
|
||||||
|
|
||||||
@node Emacs General info
|
@node Emacs General info
|
||||||
@subsubsection General information
|
@subsubsection General information
|
||||||
|
|
||||||
|
|
|
@ -994,6 +994,45 @@ Each element from GENERATIONS is a generation number."
|
||||||
'switch-to-generation profile generation)
|
'switch-to-generation profile generation)
|
||||||
operation-buffer)))
|
operation-buffer)))
|
||||||
|
|
||||||
|
|
||||||
|
;;; Pull
|
||||||
|
|
||||||
|
(defcustom guix-update-after-pull t
|
||||||
|
"If non-nil, update Guix buffers after performing \\[guix-pull]."
|
||||||
|
:type 'boolean
|
||||||
|
:group 'guix)
|
||||||
|
|
||||||
|
(defvar guix-after-pull-hook
|
||||||
|
'(guix-restart-repl-after-pull guix-update-buffers-maybe-after-pull)
|
||||||
|
"Hook run after successful performing `guix-pull' operation.")
|
||||||
|
|
||||||
|
(defun guix-restart-repl-after-pull ()
|
||||||
|
"Restart Guix REPL after `guix-pull' operation."
|
||||||
|
(guix-repl-exit)
|
||||||
|
(guix-start-process-maybe
|
||||||
|
"Restarting Guix REPL after pull operation ..."))
|
||||||
|
|
||||||
|
(defun guix-update-buffers-maybe-after-pull ()
|
||||||
|
"Update buffers depending on `guix-update-after-pull'."
|
||||||
|
(when guix-update-after-pull
|
||||||
|
(mapc #'guix-update-buffer
|
||||||
|
;; No need to update "generation" buffers.
|
||||||
|
(guix-buffers '(guix-package-list-mode
|
||||||
|
guix-package-info-mode
|
||||||
|
guix-output-list-mode
|
||||||
|
guix-output-info-mode)))
|
||||||
|
(message "Guix buffers have been updated.")))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun guix-pull (&optional verbose)
|
||||||
|
"Run Guix pull operation.
|
||||||
|
If VERBOSE is non-nil (with prefix argument), produce verbose output."
|
||||||
|
(interactive)
|
||||||
|
(let ((args (and verbose '("--verbose"))))
|
||||||
|
(guix-eval-in-repl
|
||||||
|
(apply #'guix-make-guile-expression 'guix-pull args)
|
||||||
|
nil 'pull)))
|
||||||
|
|
||||||
(provide 'guix-base)
|
(provide 'guix-base)
|
||||||
|
|
||||||
;;; guix-base.el ends here
|
;;; guix-base.el ends here
|
||||||
|
|
|
@ -31,10 +31,6 @@
|
||||||
;; installed manifest but not in a package directory), ‘id’ parameter is
|
;; installed manifest but not in a package directory), ‘id’ parameter is
|
||||||
;; still "name-version" string. So ‘id’ package parameter in the code
|
;; still "name-version" string. So ‘id’ package parameter in the code
|
||||||
;; below is either an object-address number or a full-name string.
|
;; below is either an object-address number or a full-name string.
|
||||||
;;
|
|
||||||
;; Important: as object addresses live only during guile session, elisp
|
|
||||||
;; part should take care about updating information after "Guix REPL" is
|
|
||||||
;; restarted (TODO!)
|
|
||||||
|
|
||||||
;; To speed-up the process of getting information, the following
|
;; To speed-up the process of getting information, the following
|
||||||
;; auxiliary variables are used:
|
;; auxiliary variables are used:
|
||||||
|
@ -60,6 +56,7 @@
|
||||||
(guix utils)
|
(guix utils)
|
||||||
(guix ui)
|
(guix ui)
|
||||||
(guix scripts package)
|
(guix scripts package)
|
||||||
|
(guix scripts pull)
|
||||||
(gnu packages))
|
(gnu packages))
|
||||||
|
|
||||||
(define-syntax-rule (first-or-false lst)
|
(define-syntax-rule (first-or-false lst)
|
||||||
|
|
Loading…
Reference in a new issue