MELPA aracılığıyla kurulan bir paketi düşürmenin en kolay yolu


22

Bazen, MELPA'dan gelen paket güncellemeleri emacs bölümlerinin bir kısmını kırabilir ve bu olduğunda paketin eski bir sürümünü kullanmaya geri dönmek istiyorum.

Şu anda iki şekilde yapabilirim:

  • Çöp kutusuna taşıyarak dosyaları silmek için emacs ayarlarım ve bir paketi güncellediğimde eski sürüm bozulur. Eski sürümü alabilir ve bir tanesini değiştirebilirim ~/.emacs.d/elpa.

  • İşlevselliği bozan paketin github ~/.emacs.d/elpadeposuna gidin, paketin daha eski bir sürümünü alın, bir tane gitub ile ikisiyle değiştirin, dosyaları baytla yeniden derleyin.

Bu iki yol da etrafta dolaşan birçok elle yapılan çalışmayı içerir. MELPA'dan kurulan paketleri düşürmenin daha kolay (tercihen otomatik) bir yolu var mı?


4
En yeni sürümü yalnızca ELPA / package.el ile yükleyebilirsiniz, Melpa ve Melpa-stable eski paket sürümlerini bile tutmaz. Bir paketi manuel olarak kurmak için, 1) kaynak kodu indirin 2) M-x package-install-file. ELPA / package.el dışında el-get ve quelpa gibi paketleri yönetmenin başka yolları da ELPA'sız kullanılabiliyor gibi görünüyorlar, belki de istediğinizi yapabilirler.
xuchunyang

2
Bu soruya basit ve uygulanabilir bir cevap alamazsanız , lütfen Emacs'a bir geliştirme isteği göndermeyi düşünün: M-x report-emacs-bug(ayrıca geliştirme istekleri içindir).
Drew

Yanıtlar:


9

Paketlerinizi M-x list-packagesarayüz üzerinden güncellediğinizde, paketin başarıyla yüklenmesinden sonra, eski paketi kaldırmak isteyip istemediğiniz sorulur. Bunları silmeyin, böylece yerinde kalırlar ve daha sonra daha yeni paketi bu arayüzden kaldırabilirsiniz.

Mevcut paket listem ~ / .emacs.d / elpa / dizin ağacımda yüklü 4 magit versiyonunu gösteriyor.

  magit              20160827.1549 obsolete              A Git porcelain inside Emacs
  magit              20160907.945  obsolete              A Git porcelain inside Emacs
  magit              20161001.1454 obsolete              A Git porcelain inside Emacs
  magit              20161123.617  installed             A Git porcelain inside Emacs

Eski sürümleri daha sonra, ~tüm eski paketleri işaretlemek için (paket menüsü-işareti-eski-silme) tuşuyla temizleyebilirsiniz . Belirli bir eski sürümü silmek için çizgisine gidin ve silmek düzere işaretlemek için tuşuna basın . Paketleri işaretledikten sonra x, eylemleri her zamanki gibi yürütmek için kullanırsınız .

In Emacs 25 işareti için tüm paketler Upgrade işlevselliği otomatik silinmek üzere tüm eski paketler ayarlar ve yükledikten sonra onay için istemi değildir. Yalnızca işareti kaldırabileceğiniz büyük harf "D" ile başlayan satırları aramalısınız (aşağıdaki makroyla en iyisi)

Çizginin solundaki anahtarı veya akoru aşağıdaki satırlardan yazın.

<F3>  - start macro recording
C-s   - isearch-forward
C-q   - quoted-insert
C-j   - linefeed character
D     - the mark at the start of the line
<Ret> - stops the isearch on the line with the "D"
u     - unmark the package for deletion
<F4>  - stops macro recording - the first package is now unmarked
<F4>  - executes the macro for the next upgraded package

Arama için başka eşleşme yoksa, makro zili çalacak ve durduracaktır, böylece silmek C-u 0 <F4>için işaretlenmiş tüm paketleri kaldırabilirsiniz . Bundan sonra x, kurulumları düzenleyebilirsiniz.

Yorumumda değiştirildiğini ilan ettiğim fonksiyonun henüz kavrayamayacağım bir şekilde değiştirilmesi gerekiyor, çünkü son (cond) bloğunun sonsuz döngü oluşturmamak için başarılı olması önemlidir.


Oh hey, benim emacs silmek silmek için onay istemiyor. Sadece eski paketi siler: / bence emacs 24'te sormak için kullanılır? hatırlamıyorum
Chakravarthy Raghunandan

aslında. Emacs 24 isteminde, 25 eskiyi silmek için işaretliyor gibi görünüyor ve bu işaretlerin uygulanmasında tetikleyici olacaktır. Paketleri kurulum için elle işaretleyebilir veya silme işaretlerini kaldırabilir veya (t (package-menu-mark-delete))satırları değiştirebilir, package-menu--mark-upgrades-1böylece ilk satır bir yapılandırma değişkeni testi veya nileski paketleri derhal silmek istemediğinizde geri dönen bir şey olabilir
p_wiersig

Lütfen package.elcevabı kabul edebilmem için orijinal cevapta düzenlenecek ilgili satırları ekleyebilir misiniz ? Thanks
Chakravarthy Raghunandan

Emin. İstediğim şeyi yapma işlevini yerine getiremediğimi farkettim, bu yüzden tüm makroları nasıl kaldıracağımı açıkladım.
p_wiersig

7

Olduğu gibi, "nükleer seçenek" package.eltamamen hendek ve bunun yerine yazdığım paket yöneticisini kullanmak olacaktır straight.el. Bunun avantajı straight.elGit havuzlarını klonlayarak paketleri kurması ve böylece hangi sürümü kullanmak istediğinizi önemsizleştirmesidir. Ayrıca, straight.elpaket yönetimi yapılandırmanızın tam durumunu en küçük ayrıntıya kadar kaydetmenize olanak tanıyan revizyon kilit dosyalarıyla ilgilenmek için işlevsellik sağlar. Ardından, acil bir durumda, tüm paketleri bilinen iyi sürümlerine geri alabilirsiniz.

Bu tür işlemler genel package.elolarak imkansızdır ve genel tasarım nedeniyle her zaman imkansız olacaktır.

Paketlerinizi her güncelleyişinizde bir taahhütte bulunmama isteğinize cevaben, bu gerekli değildir straight.el. Ben ediyorum tavsiye o hiç Emacs yapılandırma geçişten sonra kırılır bir duruma girecek imkansız hale getirir ve Geri döndürmek nasıl bilmiyorum çünkü bir versiyon da kilit dosyası yazma ve her zaman size paketleri güncellemenizi işlemekle. Ama bunu yapmak zorunda değilsin, hayatın sınırında yaşamaktan hoşlanıyorsan.


4

Düşürmenin kolay bir yolunu buluyorum: kendi melpa arşivinizi yönetmek.

  1. Klon melpa deposu .
  2. Tüm tarifleri kaldırmak için melpa'nın özel melpa arşiv wiki sayfasını takip edin .
  3. Dereceye düşürmek istediğiniz paketin taahhüdünü bulun ve paket için bu taahhütle yeni bir tarif oluşturun. ( Melpa'nın beni nasıl belirleyeceği hakkında benioku belgesine bakın )
  4. makeİndirilmiş paketi oluşturmak için çalıştırın
  5. Yerel bir dizin olabilen kendi melpa arşivinizi listeye ekleyin package-archives.
  6. İndirilen paketi, paket menüsünü kullanarak kurun. Veya package-pinned-packagespaketin indirileceği arşivi kısıtlamak için kullanabilirsiniz .

3

Pek çok insan ELPA paketlerini sürüm kontrolüne dahil etmemeyi seçiyor, ancak bu neden yapmanız gerektiğine inandığımın bir örneği.

Eğer bir şeyleri geri almak , hepsi taahhüt edildiyse önemsizdir.

Yukarı akış ELPA paketlerinin durumuna bağlı olarak risklidir.


Ancak bu, paketleri her güncellediğimde taahhüt etmeyi hatırlamak zorunda kalacağım anlamına gelir. İstediğim bu değil. VEYA bir paket güncellemesi yaptığımda, emacs'ı güncellenmiş paketleri otomatik olarak aşamalı hale getirip işleme koyabileceğim bir yöntem var mı?
Chakravarthy Raghunandan

1
Yapılandırmanızdaki değişiklikleri neden kasıtlı kararlar almak istemediğinizi anlamıyorum. Otomatik taahhüt konusunda, otomatik olabileceğinden eminim , ama bunun için bir çözümüm yok. Bununla birlikte, bu tür çözümler aramak verimli olabilir.
phils
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.