Không nâng cấp tất cả các gói


13

Tôi muốn emacs của tôi tự động nâng cấp tất cả các gói trong các điều kiện nhất định.

Cách tốt nhất để làm điều này là gì?


Đây là một lệnh để nâng cấp tất cả các gói lỗi thời: github.com/Malabarba/paradox/blob/2.3.5/paradox.el#L165-L181 (thay thế tất cả paradoxbằng package).
xuchunyang

@xuchunyang À. Tôi thấy điều đó không tệ lắm. Nếu bạn đưa ra câu trả lời, tôi sẽ chấp nhận nó.
PythonNut

Câu trả lời:


9

Tôi không chắc đây là điều bạn muốn (Tôi không biết ý của bạn là gì trong điều kiện nhất định phạm vi), nhưng đây là chức năng tôi sử dụng để nâng cấp tất cả các gói mà không hiển thị *Packages*bộ đệm, tôi thấy khó chịu khi tôi chỉ muốn để nâng cấp các gói.

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

Đây là cố gắng tốt. Nó cũng ngăn chặn bộ đệm biên dịch bật lên.


Đẹp. Tôi sẽ sử dụng điều này với một biến thể nhỏ không nhắc nhở trước khi nâng cấp các gói.
PythonNut

Có bất kỳ lý do cụ thể tại sao bạn làm (y-or-n-p (message ..))thay vì chỉ (y-or-n-p ...)?
PythonNut

@PythonNut, Tôi cần xây dựng thông báo nhanh chóng, bây giờ tôi không nhớ tại sao tôi sử dụng message, có vẻ như nó cũng có thể được thực hiện format.
Đánh dấu Karpov

À đúng rồi. Tôi có nghĩa là sử dụng format. Rõ ràng bạn không thể làm điều đó mà không có bất kỳ loại nội suy chuỗi nào.
PythonNut

8

Bạn có thể sử dụng tự động cập nhật gói .

Cài đặt nó bằng cách M-x package-install auto-update-package. Nó cung cấp một chức năng được gọi là auto-package-update-now. Bạn có thể viết một ifđiều kiện đơn giản và thêm nó vào .emacs.

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

Hừm ... Tôi sẽ ghi nhớ điều này, nhưng ý tưởng là thử tự động sửa chữa đóng gói nếu chúng bị hỏng. Tùy thuộc vào một gói để làm như vậy là vô nghĩa. :-)
PythonNut

1

Gói này được gọi là cập nhật gói tự động. (Danh tiếng quá thấp để viết nó như một bình luận cho bài viết Chillar ở trên).

(Sao chép từ bài đăng của anh ấy và hợp nhất với câu trả lời này):

Cài đặt nó bằng cách M-x package-install auto-package-update. Nó cung cấp một chức năng được gọi là auto-package-update-now. Bạn có thể viết một điều đơn giản nếu điều kiện và thêm nó vào ~/.emacs.

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

Tôi đã chỉnh sửa câu trả lời của Chillar để sửa tên gói, chúng tôi có thể xóa cái này ngay bây giờ.
joelittlejohn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.