Use `package-install-upgrade-build-in' to upgrade Org

This commit is contained in:
Gerard Vermeulen 2023-05-17 16:55:19 +02:00
parent 9ca8fd039e
commit 1f57ae3a74

View File

@ -199,13 +199,9 @@ that *Emacs is a self-documenting editor.*
:END: :END:
The =user-init-file= header requires =cl-lib= and sets Emacs options. It The =user-init-file= header requires =cl-lib= and sets Emacs options. It
consists of two parts in listing [[lst:1st-setopt-call]], and [[lst:2nd-setopt-call]] in consists of three parts in listing [[lst:1st-setopt-call]], [[lst:2nd-setopt-call]], and
order to limit the length of the listings for exporting to LaTeX. [[lst:2nd-setopt-call]] in order to limit the length of the listings for exporting
to LaTeX.
The [[info:elisp#Quoting][quoting (info)]] and the [[info:elisp#Backquote][backquote (info)]] pages explain how to understand the
~'~ (quote), ~`~ (backquote), ~,~ (substitute) and ~@,~ (splice) in in listing
[[lst:1st-setopt-call]] and [[lst:2nd-setopt-call]]. A tutorial of how to use those
reader macros is the [[https://mullikine.github.io/posts/macro-tutorial/][didactic emacs-lisp macro example]].
The [[info:emacs#Init File][init file (info)]] does not load the ~custom-file~ in spite of the The [[info:emacs#Init File][init file (info)]] does not load the ~custom-file~ in spite of the
recommendation of [[info:emacs#Saving Customizations][saving customizations (info)]]. recommendation of [[info:emacs#Saving Customizations][saving customizations (info)]].
@ -264,8 +260,8 @@ recommendation of [[info:emacs#Saving Customizations][saving customizations (inf
(add-to-list 'initial-frame-alist '(width . 180))) (add-to-list 'initial-frame-alist '(width . 180)))
#+end_src #+end_src
#+caption[Set the second set of Emacs options]: #+caption[Set the second set of Emacs options: pin packages to archives]:
#+caption: Set the second set of Emacs options. #+caption: Set the second set of Emacs options: pin packages to archives.
#+name: lst:2nd-setopt-call #+name: lst:2nd-setopt-call
#+begin_src emacs-lisp -n :results silent #+begin_src emacs-lisp -n :results silent
(setopt (setopt
@ -276,16 +272,17 @@ recommendation of [[info:emacs#Saving Customizations][saving customizations (inf
("melpa" . "https://melpa.org/packages/") ("melpa" . "https://melpa.org/packages/")
("melpa-stable" . "https://stable.melpa.org/packages/") ("melpa-stable" . "https://stable.melpa.org/packages/")
("nongnu" . "https://elpa.nongnu.org/nongnu/")) ("nongnu" . "https://elpa.nongnu.org/nongnu/"))
;; Pin packages to GNU ELPA for info or stability. package-install-upgrade-built-in t
;; Pin packages to GNU ELPA for info for stability.
package-pinned-packages '((auctex . "gnu") package-pinned-packages '((auctex . "gnu")
(compat . "gnu") (compat . "gnu")
(consult . "gnu-devel") (consult . "gnu-devel")
(embark . "gnu-devel") (embark . "gnu-devel")
(embark-consult . "gnu-devel") (embark-consult . "gnu-devel")
(eldoc . "nongnu")
(engrave-faces . "gnu-devel") (engrave-faces . "gnu-devel")
(hyperbole . "gnu-devel") (hyperbole . "gnu-devel")
(marginalia . "gnu-devel") (marginalia . "gnu-devel")
(org . "gnu-devel")
(osm . "gnu-devel") (osm . "gnu-devel")
(parsebib . "melpa-stable") (parsebib . "melpa-stable")
(queue . "gnu") (queue . "gnu")
@ -293,10 +290,38 @@ recommendation of [[info:emacs#Saving Customizations][saving customizations (inf
(spinner . "gnu") (spinner . "gnu")
(xr . "gnu") (xr . "gnu")
(vertico . "gnu-devel")) (vertico . "gnu-devel"))
package-selected-packages '(async ; asynchroneous processing package-selected-packages '(async debbugs no-littering))
debbugs ; access the GNU bug tracker #+end_src
no-littering ; keep `user-emacs-directory' clean
org)) #+caption[Set the third set of Emacs options: upgrade build in Org]:
#+caption: Set the third set of Emacs options: upgrade build in Org.
#+name: lst:3rd-setopt-call
#+begin_src emacs-lisp
;; Enable `package-install-upgrade-build-in' to upgrade Org.
;; Disable upgrading other packages by pinning them to "nongnu".
(setopt package-install-upgrade-built-in t
package-pinned-packages
(cl-union '((bind-key . "nongnu")
(eglot . "nongnu")
(erc . "nongnu")
(external-completion . "nongnu")
(faceup . "nongnu")
(jsonrpc . "nongnu")
(let-alist . "nongnu")
(map . "nongnu")
(ntlm . "nongnu")
(org . "gnu-devel") ; Upgrade!
(python . "nongnu")
(project . "nongnu")
(seq . "nongnu")
(soap-client . "nongnu")
(so-long . "nongnu")
(svg . "nongnu")
(use-package . "nongnu")
(use-package-ensure-system-package . "nongnu")
(verilog-mode . "nongnu")
(xref . "nongnu"))
package-pinned-packages :key #'car))
#+end_src #+end_src
* [[info:emacs#Package Installation][Install the selected packages (info)]] * [[info:emacs#Package Installation][Install the selected packages (info)]]
@ -304,18 +329,20 @@ recommendation of [[info:emacs#Saving Customizations][saving customizations (inf
:CUSTOM_ID: sec:install-selected-packages :CUSTOM_ID: sec:install-selected-packages
:END: :END:
[[info:emacs#Package Installation][Emacs installs packages]] from archives on the internet. This setup uses three [[info:emacs#Package Installation][Emacs installs packages]] from archives on the internet. This setup uses five
archives: archives:
1. The [[https://elpa.gnu.org/][GNU Emacs Lisp Package Archive]] 1. The [[https://elpa.gnu.org/][GNU Emacs Lisp Package Archive]].
2. The [[https://elpa.nongnu.org/][NonGNU Emacs Lisp Package Archive]]. 2. The [[https://elpa.gnu.org/devel/index.html][Development Emacs Lisp Package Archive]].
3. The [[https://melpa.org/#/][Milkypostman's Emacs Lisp Package Archive (MELPA)]] with its official 3. The [[https://elpa.nongnu.org/][NonGNU Emacs Lisp Package Archive]].
4. The [[https://melpa.org/#/][Milkypostman's Emacs Lisp Package Archive (MELPA)]] with its official
[[https://www.mirrorservice.org/sites/melpa.org/packages/][mirror]] in case [[https://downforeveryoneorjustme.com/melpa.org][is Melpa.org down?]] tells [[https://melpa.org/#/][MELPA]] is down for everyone. [[https://www.mirrorservice.org/sites/melpa.org/packages/][mirror]] in case [[https://downforeveryoneorjustme.com/melpa.org][is Melpa.org down?]] tells [[https://melpa.org/#/][MELPA]] is down for everyone.
5. The [[https://stable.melpa.org/#/getting-started][Stable Milkypostman's Emacs Lisp Package Archive]].
The code in listing [[lst:install-selected-packages]] assumes that the package The code in listing [[lst:install-selected-packages]] assumes that the package
system is in a *virgin* state if the package [[https://github.com/emacscollective/no-littering][no-littering]] is not present: system is in a *virgin* state if the package [[https://github.com/emacscollective/no-littering][no-littering]] is not present:
1. It installs and loads [[https://github.com/emacscollective/no-littering][no-littering]] after ensuring refreshing of the 1. It installs and loads [[https://github.com/emacscollective/no-littering][no-littering]] after ensuring refreshing of the
contents of available packages. contents of available packages.
2. It installs [[https://elpa.gnu.org/devel/org.html][Org (GNU-devel ELPA archive)]] early to shadow the built-in package 2. It upgrades the build in Org package.
while preventing collisions between the snapshot and built-in packages.
3. It calls src_emacs-lisp{(package-install-selected-packages)} to check the 3. It calls src_emacs-lisp{(package-install-selected-packages)} to check the
installation status of all packages in installation status of all packages in
src_emacs-lisp{package-selected-packages} and to install the missing packages src_emacs-lisp{package-selected-packages} and to install the missing packages
@ -337,14 +364,7 @@ the contents of packages and allows to update packages to the latest version.
;; Install and require `no-littering'. ;; Install and require `no-littering'.
(package-install 'no-littering) (package-install 'no-littering)
(require 'no-littering) (require 'no-littering)
;; Stolen from (find-function-other-window 'eglot-upgrade-eglot): (package-upgrade 'org)
(defun shadow-builtin-by-install (pkg)
(unless (bound-and-true-p package-archive-contents)
(package-refresh-contents))
(package-install (cadr (assoc pkg package-archive-contents))))
;; Shadow built-in `org' by installing `org'.
;; Note (package-reinstall 'org) deletes the shadowing `org'.
(shadow-builtin-by-install 'org)
;; Install the selected packages. ;; Install the selected packages.
(package-install-selected-packages))) (package-install-selected-packages)))