Bevor ich abends den Computer ausschalte (besser: per Befehl ausschalten lasse),
führe ich noch einige Wartungsarbeiten durch. Eines davon ist das Backup des
Systems, aber auch die Aktualisierung des Systems. Für Debian ist dies mit apt
recht leicht möglich und ebenso mit rustup/cargo für die Rust-Pakete. Nur
fehlte mir bisher etwas für Emacs. Aber Emacs wäre nicht Emacs, wenn da nicht
auch was ginge, und daher habe ich mir eine Funktion gebastelt, die ich ganz
einfach von der Kommandozeile aus mit emacsclient --eval '(upgrade-packages)'
aufrufen kann.
(defun upgrade-packages ()
"Upgrade all packages
Usage: 'emacsclient --eval \"(upgrade-packages)\"'"
(package-initialize)
(package-list-packages t)
(package-refresh-contents)
(package-menu-mark-upgrades)
;; this is the essence from `package-autoremove`, because this sticks in prompt
(let ((removable (package--removable-packages)))
(when removable
(mapc (lambda (p)
(package-delete (cadr (assq p package-alist)) t))
removable)))
(prog1
(package-menu-execute t)
; remove now obsolete packages
(let ((removable (package--removable-packages)))
(when removable
(mapc (lambda (p)
(package-delete (cadr (assq p package-alist)) t))
removable)
(package-menu-execute t)
))
(quit-window))
)
Entscheidend daran ist, dass die Funktion blockiert, bis alle Arbeiten
abgeschlossen sind, damit der Befehl systemctl suspend
nicht zu früh
ausgeführt wird. Somit kann ich alle Wartungsarbeiten schön von der Shell aus
koordiniert starten und mir ist egal, wie lange es braucht.