Tüm paketleri etkileşimli olarak yükseltmeyin


13

Emacs'ımın belirli koşullar altında tüm paketleri otomatik olarak yükseltmesini istiyorum.

Bunu yapmanın en iyi yolu nedir?


: İşte bütün eski paketleri yükseltme fo bir komuttur github.com/Malabarba/paradox/blob/2.3.5/paradox.el#L165-L181 (tümü yerine paradoxbirlikte package).
xuchunyang

@xuchunyang Ah. Görüyorum ki çok kötü görünmüyor. Eğer cevap verirsen, kabul ederdim.
PythonNut

Yanıtlar:


9

İstediğiniz bu olduğundan emin değilim (“belirli koşullar altında” ile ne demek istediğinizi bilmiyorum), ama burada *Packages*arabellek göstermeden tüm paketleri yükseltmek için kullandığım bir işlev var, sadece istediğimde can sıkıcı buluyorum paketleri yükseltmek için.

(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"))))

Bu iyi denendi. Derleme arabelleklerinin açılmasını da engeller.


Güzel. Bunu, paketleri yükseltmeden önce sormayan hafif bir varyasyonla kullanacağım.
PythonNut

(y-or-n-p (message ..))Adil olmak yerine bunu yapmanın özel bir nedeni var mı (y-or-n-p ...)?
PythonNut

@PythonNut, Peki hızlı mesaj oluşturmam gerekiyor, şimdi neden kullandığımı hatırlamıyorum message, aynı zamanda da yapılabileceği anlaşılıyor format.
Mark Karpov

Ah evet. Ben kullanmak istedim format. Açıkçası herhangi bir dize enterpolasyonu olmadan bunu yapamazsınız.
PythonNut

8

Sen kullanabilirsiniz otomatik paket güncelleme .

Tarafından yükleyin M-x package-install auto-update-package. Adlı bir işlev sağlar auto-package-update-now. Basit bir ifkoşul yazabilir ve bunu durumunuza ekleyebilirsiniz .emacs.

(if your-condition
   (auto-package-update-now))

Hm ... Bunu aklımda tutacağım, ancak fikir, kırılmışlarsa otomatik olarak paketlenmiş düzeltmeyi denemektir. Bir pakete bağlı olarak bunu yapmak saçmadır. :-)
PythonNut

1

Paket artık otomatik paket güncellemesi olarak adlandırılıyor. (Yukarıdaki Chillar yazıya yorum yapmak için çok düşük bir itibar).

(Görevinden kopyalandı ve bu cevapla birleşti):

Tarafından yükleyin M-x package-install auto-package-update. Adlı bir işlev sağlar auto-package-update-now. Eğer basit bir koşul yazabilir ve bunu kendi durumunuza ekleyebilirsiniz ~/.emacs.

(if your-condition
   (auto-package-update-now))

Paket adını düzeltmek için Chillar'ın cevabını düzenledim, sanırım şimdi bunu silebiliriz.
joelittlejohn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.