Function: package--autosuggest-prompt
package--autosuggest-prompt is a byte-compiled function defined in
package.el.gz.
Signature
(package--autosuggest-prompt PACKAGES)
Documentation
Query the user whether to install PACKAGES or not.
PACKAGES is a list of package suggestions in the form described in
package--suggestion-applies-p. The function returns a non-nil value
if the user confirms installation, otherwise nil.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/package.el.gz
(defun package--autosuggest-prompt (packages)
"Query the user whether to install PACKAGES or not.
PACKAGES is a list of package suggestions in the form described in
`package--suggestion-applies-p'. The function returns a non-nil value
if the user confirms installation, otherwise nil."
(let* ((inhibit-read-only t) (use-hard-newlines t)
(nl (propertize "\n" 'hard t)) (nlnl (concat nl nl))
(buf (current-buffer)))
(with-current-buffer (get-buffer-create
(format "*package suggestion: %s*"
(buffer-name buf)))
(erase-buffer)
(insert
"The buffer \""
(buffer-name buf)
"\" currently lacks any language-specific support.
The package manager can provide the editor support for these kinds of
files by downloading a package from Emacs's package archive:" nl)
(when (length> packages 1)
(insert nl "(Note that there are multiple candidate packages,
so you have to select which to install!)" nl))
(pcase-dolist (`(,pkg . ,sugs) (seq-group-by #'car packages))
(insert nl "* "
(buttonize (concat "Install " (symbol-name pkg))
(lambda (_)
(package--autosuggest-install-and-enable
(car sugs))
(quit-window)))
" ("
(buttonize "about"
(lambda (_)
(unless (assq pkg package-archive-contents)
(package-read-all-archive-contents))
(describe-package pkg)))
", matches ")
(dolist (sug sugs)
(unless (eq (char-before) ?\s)
(insert ", "))
(pcase sug
(`(,_ auto-mode-alist . ,_)
(insert "file extension "))
(`(,_ magic-mode-alist . ,_)
(insert "magic bytes"))
(`(,_ interpreter-mode-alist . ,_)
(insert "interpreter "))))
(delete-horizontal-space) (insert ").")
(add-to-list 'package--autosuggest-suggested pkg))
(insert nl "* " (buttonize "Do not install anything" (lambda (_) (quit-window))) "."
nl "* " (buttonize "Permanently disable package suggestions"
(lambda (_)
(customize-save-variable
'package-autosuggest-mode nil
"Disabled at user's request")
(quit-window)))
"."
nlnl "To learn more about package management, read "
(buttonize "(emacs) Packages" (lambda (_) (info "(emacs) Packages")))
", and to learn more about how Emacs supports specific languages, read "
(buttonize "(emacs) Major modes" (lambda (_) (info "(emacs) Major modes")))
".")
(fill-region (point-min) (point-max))
(special-mode)
(button-mode t)
(let ((win (display-buffer-below-selected (current-buffer) '())))
(fit-window-to-buffer win)
(select-window win)
(set-window-dedicated-p win t)
(set-window-point win (point-min))))))