package – Actualizar todos los paquetes de forma no interactiva

Pregunta:

Quiero que mi emacs actualice automáticamente todos los paquetes bajo ciertas condiciones.

¿Cuál es la mejor forma de hacer esto?

Respuesta:

No estoy seguro de que esto sea lo que quiere (no sé qué quiere decir con "bajo ciertas condiciones"), pero aquí hay una función que uso para actualizar todos los paquetes sin mostrar el búfer *Packages* , lo cual me molesta cuando Solo quiero actualizar paquetes.

(defun package-upgrade-all ()
  "Upgrade all packages automatically without showing *Packages* buffer."
  (interactive)
  (package-refresh-contents)
  (let (upgrades)
    (cl-flet ((get-version (name where)
                (let ((pkg (cadr (assq name where))))
                  (when pkg
                    (package-desc-version pkg)))))
      (dolist (package (mapcar #'car package-alist))
        (let ((in-archive (get-version package package-archive-contents)))
          (when (and in-archive
                     (version-list-< (get-version package package-alist)
                                     in-archive))
            (push (cadr (assq package package-archive-contents))
                  upgrades)))))
    (if upgrades
        (when (yes-or-no-p
               (message "Upgrade %d package%s (%s)? "
                        (length upgrades)
                        (if (= (length upgrades) 1) "" "s")
                        (mapconcat #'package-desc-full-name upgrades ", ")))
          (save-window-excursion
            (dolist (package-desc upgrades)
              (let ((old-package (cadr (assq (package-desc-name package-desc)
                                             package-alist))))
                (package-install package-desc)
                (package-delete  old-package)))))
      (message "All packages are up to date"))))

Esto está bien probado. También evita que aparezcan búferes de compilación.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım