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.