सभी संकुल को निर्बाध रूप से अपग्रेड करें


13

मैं चाहता हूं कि मेरे ईमैक्स कुछ शर्तों के तहत सभी पैकेजों को स्वचालित रूप से अपग्रेड करें।

ऐसा करने का सबसे अच्छा तरीका क्या है?


यहाँ सभी पुराने पैकेजों को अपग्रेड करने के लिए एक कमांड है: github.com/Malabarba/paradox/blob/2.3.5/paradox.el#L165-L181 (सभी के paradoxसाथ बदलें package)।
xuchunyang

@xuchunyang आह। मैं देखता हूं कि बहुत बुरा नहीं लगता। यदि आप इसका उत्तर देते हैं, तो मैं इसे स्वीकार करूंगा।
पाइथननूट

जवाबों:


9

मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं (मुझे नहीं पता कि आपके "कुछ शर्तों के तहत" से क्या मतलब है), लेकिन यहां एक फ़ंक्शन है *Packages*जो मैं बफर को दिखाए बिना सभी पैकेजों को अपग्रेड करने के लिए उपयोग करता हूं , जो मुझे सिर्फ जब मैं चाहता हूं तो मुझे गुस्सा आता है पैकेज का उन्नयन करने के लिए।

(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-or-n-p (message ..))बस के बजाय क्यों करते हैं (y-or-n-p ...)?
21

@PythonNut, वैसे मुझे शीघ्र संदेश का निर्माण करने की आवश्यकता है, मुझे अब याद नहीं है कि मैं क्यों उपयोग करता हूं message, ऐसा लगता है कि यह formatबस के साथ भी किया जा सकता है ।
मार्क कारपोव

आह येस। मेरा मतलब था उपयोग करना format। जाहिर है आप इसे किसी भी प्रकार के स्ट्रिंग इंटरपोलेशन के बिना नहीं कर सकते।
21

8

आप ऑटो-पैकेज-अपडेट का उपयोग कर सकते हैं ।

द्वारा स्थापित करें M-x package-install auto-update-package। यह नामक एक फ़ंक्शन प्रदान करता है auto-package-update-now। आप एक साधारण ifशर्त लिख सकते हैं और उसे अपने साथ जोड़ सकते हैं .emacs

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

हम्म ... मैं इसे ध्यान में रखूंगा, लेकिन विचार यह है कि अगर वे टूट गए हैं तो स्वचालित रूप से पैक किए गए फिक्सिंग की कोशिश करें। एक पैकेज के आधार पर ऐसा करना निरर्थक है। :-)
अजगर

1

पैकेज को अब ऑटो-पैकेज अपडेट कहा जाता है। (ऊपर कम चिल्लर पोस्ट के लिए एक टिप्पणी के रूप में लिखने के लिए बहुत कम प्रतिष्ठा)।

(उनके पद से कॉपी किया गया और इस उत्तर के साथ विलय):

द्वारा स्थापित करें M-x package-install auto-package-update। यह नामक एक फ़ंक्शन प्रदान करता है auto-package-update-now। आप एक साधारण लिख सकते हैं यदि शर्त और इसे अपने में जोड़ें ~/.emacs

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

मैंने पैकेज के नाम को सही करने के लिए छिल्लर के उत्तर को संपादित किया है, हम इसे अब मेरे विचार से हटा सकते हैं।
जोएलबेटजोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.