mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 05:18: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
|
||||
|
||||
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
|
||||
@subsubsection General information
|
||||
|
||||
|
|
|
@ -994,6 +994,45 @@ Each element from GENERATIONS is a generation number."
|
|||
'switch-to-generation profile generation)
|
||||
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)
|
||||
|
||||
;;; guix-base.el ends here
|
||||
|
|
|
@ -31,10 +31,6 @@
|
|||
;; installed manifest but not in a package directory), ‘id’ parameter is
|
||||
;; still "name-version" string. So ‘id’ package parameter in the code
|
||||
;; 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
|
||||
;; auxiliary variables are used:
|
||||
|
@ -60,6 +56,7 @@
|
|||
(guix utils)
|
||||
(guix ui)
|
||||
(guix scripts package)
|
||||
(guix scripts pull)
|
||||
(gnu packages))
|
||||
|
||||
(define-syntax-rule (first-or-false lst)
|
||||
|
|
Loading…
Reference in a new issue