অবিচ্ছিন্নভাবে সমস্ত প্যাকেজ আপগ্রেড করুন


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 ...)?
পাইথননট

পাইথননট, ওয়েল, আমাকে প্রম্পট বার্তা তৈরি করা দরকার, আমি এখন কেন মনে করি না কেন messageমনে হচ্ছে, মনে হয় এটি formatঠিক পাশাপাশি করা সম্ভব।
মার্ক কার্পভ

অই হ্যাঁ. আমি ব্যবহার বোঝানো format। স্পষ্টতই আপনি কোনও ধরণের স্ট্রিং ইন্টারপোলেশন ছাড়াই এটি করতে পারবেন না।
পাইথননট

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

প্যাকেজের নামটি সংশোধন করার জন্য আমি চিলারের উত্তর সম্পাদনা করেছি, এখন আমি মনে করি এটি এটিকে মুছতে পারি।
joelittlejohn
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.