पैकेज-ऑटोरेमोव कैसे तय करता है कि कौन से पैकेज को निकालना है?


11

पैकेज-ऑटोरेमोव चलाने के लिए मेरे वर्तमान पैकेज को अपडेट करते समय मुझे अक्सर संकेत दिया जाता है जो पुराने या अनावश्यक पैकेज को हटाने का दावा करता है। हालाँकि यह हमेशा (उन पुराने पैकेजों के साथ) दो पैकेजों को हटाने के लिए लगता है, जिनका मैं उपयोग करता हूं (अर्थात औरोरा-विषय, मेरी पसंद का वर्तमान विषय और dired +)।

मुझे डर है कि मैं कुछ नौसिखिया हूँ जब यह Emacs-Lisp की बात आती है और मैं बस सोच रहा था कि क्या कोई ऐसा तरीका था जिससे मैं इन पैकेजों को हटाने वाले पैकेज ऑटोरेमोव को रोक सकता था इसलिए मुझे उन्हें पुनः स्थापित करने की आवश्यकता नहीं थी।

जवाबों:


7

स्रोत यहां है: https://github.com/emacs-mirror/emacs/blob/master/lisp/emacs-lisp/package.el#L2113

यह उन सभी पैकेजों को हटा देता है जो पैकेज-चयनित-पैकेज में नहीं हैं और न ही एक निर्भरता है।

(defun package-autoremove ()
"Remove packages that are no more needed.
        Packages that are no more needed by other packages in
        `package-selected-packages' and their dependencies
        will be deleted."
(interactive)
;; If `package-selected-packages' is nil, it would make no sense to
;; try to populate it here, because then `package-autoremove' will
;; do absolutely nothing.
(when (or package-selected-packages
            (yes-or-no-p
            (format-message
            "`package-selected-packages' is empty! Really remove ALL packages? ")))
    (let ((removable (package--removable-packages)))
    (if removable
        (when (y-or-n-p
                (format "%s packages will be deleted:\n%s, proceed? "
                        (length removable)
                        (mapconcat #'symbol-name removable ", ")))
            (mapc (lambda (p)
                    (package-delete (cadr (assq p package-alist)) t))
                removable))
        (message "Nothing to autoremove")))))

(defun package--removable-packages ()
  "Return a list of names of packages no longer needed.
These are packages which are neither contained in
`package-selected-packages' nor a dependency of one that is."
  (let ((needed (cl-loop for p in package-selected-packages
                         if (assq p package-alist)
                         ;; `p' and its dependencies are needed.
                         append (cons p (package--get-deps p)))))
    (cl-loop for p in (mapcar #'car package-alist)
             unless (memq p needed)
             collect p)))

1
तो इस कोड का मतलब है कि अगर पैकेज का नाम जोड़ा जाता है package-selected-packages, तो यह ऑटोरेमेड नहीं होगा।
zck

@zck हाँ। पैकेज - हटाने योग्य-पैकेजों ने ऐसा किया।
जिगेक

यह भी ध्यान देने योग्य है कि package-selected-packagesजब आप संकुल को स्थापित और हटाते हैं तो स्वतः ही अद्यतन हो जाता है। आपको आमतौर पर इसे सीधे संशोधित करने की आवश्यकता नहीं है। यदि आप चीजों को ऑटो-हटाए जाते हैं, तो वे संभावित पैकेज होते हैं जिन्हें आपके द्वारा इंस्टॉल की गई कुछ की निर्भरता के रूप में खींचा गया था और फिर बाद में हटा दिया गया था। ऑटो-हटाने का समर्थन करने के अलावा, इस चर का उपयोग तब किया जा सकता है जब आप अपने emacs config को एक नई मशीन में कॉपी करते हैं और अपने चयनित संकुल सूची में सब कुछ स्थापित करना चाहते हैं, का उपयोग करते हुए package-install-selected-packages
ग्लूकास

1
@jiegec मेरा कहना है कि खराब लिखा गया था कि उपयोगकर्ता की समस्या का समाधान ("मैं पैकेजों को package-selected-packages
ऑटोरेमेड

@zck हाँ। आप सही हैं
jiegec 23
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.