Kurulu paketlerin yalnızca bir alt kümesi nasıl yüklenir


13

Birkaç paket arasında etkileşim içeren bir hata ile karşılaştım. Hatayı bildirmek için, sorunu gösteren tekrarlanabilir bir tarif sağlamam gerekiyor. Bu, uygun paketlerin yüklenmesini gerektirir, ancak başlamamdan başka bir şey yoktur ve başka paketler yoktur. Bunu yapmanın en iyi yolu nedir?

GÜNCELLEME

Açıklığa kavuşturmak için, bir soruna neden olan kodu tanımlamak için ikili bir aramada .emac'lerimi eleme kavramına aşinayım. Bu durumda, hangi paketlerin soruna neden olduğunu tam olarak biliyorum. Bilmediğim, package-sistemi sadece bu birkaç paketi yüklemek için nasıl kullanacağım .

(package-initialize)paketleri yükler, aynı zamanda dizinimdeki diğer her şeyi yükler .emacs.d/elpa. package-load-listyüklenecek paketlerin belirli sürümlerini veya açıkça hariç tutulacak belirli paketleri belirtmeme olanak tanır . Ben ters - nasıl Emacs elpa / paket sisteminde başka herhangi bir paket yüklemeden, dahil etmek için paket listesi sağlamak .


Sorunu sınırlı sayıda pakete ayırdıysanız, boş bir .emacsdosyadan başlayarak sorunu yeniden oluşturmayı deneyebilirsiniz - her paketi tek tek yükleyin ve ardından sorunun devam edip etmediğini görün. Kendinizi şaşırtabilir ve diğer pakette hoş olmayan paketi sorumlu bulabilirsiniz. Mümkün olduğunca ileri gittiğinizde, sorunu yeniden oluşturmak için kullandığınız adımları yazın ve hata raporunu gönderin - örneğin, Emacs -Q'dan başlayarak, A paketini yükleyin, ardından B paketini yükleyin, ardından C paketini yükleyin, sonra *Scratch*arabelleği açın ve yazın ...
hukukçu

@Lawlist ne dedi. İşleri tamamen daralttığınızdan emin değilseniz, ikili aramayı kullanın: sorunu ortadan kaldıran şeyin rastgele bir kısmını kaldırın (örneğin 4'ten 2 pkgs'i kaldırın). Sonra 3/4, 7/8, ... kodlarını her seferinde yeniden ikiye bölmek için gereken kodu doğrayın. Benzer şekilde, belirli bir paketin kodunu 1/2, vb. Olarak doğrayın, bunları yeniden üretmek için gereken çok küçük bir kod parçasına kadar daraltın. Bir metin bölgesini comment-regionyorumlamak (veya C-ubu işareti kaldırmak için) komutunu kullanabilirsiniz .
Drew

Bunu sahte kod düzeyinde anlıyorum. Komutların paket ailesini kullanarak, paketlerinizin yalnızca bir alt kümesini nasıl yüklediğinizi anlamıyorum. emacs.d / elpa dizini
Tyler

Daha önce bir koruyucu
Tyler

1
package-load-list olduğu açıkça sadece kaldırmak paketleri içerecek şekilde bir yol allsembolü.
npostavs

Yanıtlar:


10

package-load-listDeğişken paketleri ve sürümleri yüklemek için tam olarak hangi belirtmek için kullanılabilir:

List of packages for `package-initialize' to load.
Each element in this list should be a list (NAME VERSION), or the
symbol `all'.  The symbol `all' says to load the latest installed
versions of all packages not specified by other elements.

For an element (NAME VERSION), NAME is a package name (a symbol).
VERSION should be t, a string, or nil.
If VERSION is t, the most recent version is activated.
If VERSION is a string, only that version is ever loaded.
 Any other version, even if newer, is silently ignored.
 Hence, the package is "held" at that version.
If VERSION is nil, the package is not loaded (it is "disabled").

Dikkat edilmesi gereken tek şey, varsayılan değerin içerdiği all, eğer setqo zaman iyi olacaksınız, çünkü orijinal değerin tamamen üzerine yazılır.

(require 'package)
(setq package-load-list
      '((package1 "4.2")
        (package2 "0.5.1")))
(package-initialize)

4

Hatayı yeniden üretmek için çalışan geliştiricilerin yüklü bu bağımlılıklara sahip olamayacağı (veya isteyemeyeceği) bağlamlarda iyi çalışan bir seçenek trypaketi kullanmaktır ( https://melpa.org/#/try ). Diğerleri yerel yüklemelerini değiştirmeden paket yönetiminden bir paket yükleyebilir.

(package-install 'try)
(require 'try)

(try 'some-package)
(try 'some-other-package)

(steps (to reproduce) (the (problem)))

2

Bu kullanım durumu korkunç bir eksikliktir package.el, bu yüzden kullanmayın package.el. Bunun yerine, straight.elbu kullanım durumunu desteklemek için özel olarak tasarlanmış (yazarım) gibi bir paket yöneticisi kullanın.

Üzerinde ayrıntılı dokümantasyon için straight.eldiğer paket yöneticilerine karşılaştırmalar da dahil olmak üzere, bkz README . Aşağıda, sorunuzla ilgili bölümü alıntıladım.

straight.elHata üretmek için kullanma

Yazmak istediğim en önemli nedenlerden straight.elbiri, mevcut paket yöneticilerinin hataları yeniden üretmek için iyi olmamalarıydı. Örneğin, bazıları paket yöneticisi başlatıldığında kurulu tüm paketleri yükleyecektir! Açıkçası bu bir "minimal test durumu" için kabul edilemez.

Aksine, önyükleme kendisi straight.eldışında hiçbir şey yüklemez straight.el(varsayılan tarif depoları kaydedilir, ancak gerekene kadar klonlanmaz). Normalde yükleme olmalıdır straight.elvasıtasıyla önyükleme pasajı , ancak olduğunda emacs -Q, burada başlatabilir nasıl straight.el:

M-x load-file RET ~/.emacs.d/straight/bootstrap.el RET

Bunu komut satırından da belki bunun için bir takma ad oluşturarak yapabilirsiniz:

$ emacs -Q -l ~/.emacs.d/straight/bootstrap.el

Diyelim ki Mermi için bir hata raporu hazırlıyorsunuz. Yalnızca Mermi ve tüm bağımlılıklarını yüklemek için şunu çalıştırın:

M-x straight-use-package RET projectile RET

Bunun, şu anda kullanıma alınmış olan Mermi revizyonlarını ve tüm bağımlılıklarını kullanacağını unutmayın, bu nedenle hata raporunuzu yapmak için bunları not etmelisiniz.


0

Bir kereye mahsus olmak için ihtiyacınız olduğunda (örneğin, bir hatayı yeniden üretmek için bir tarifi denemek ve test etmek için), genellikle aşağıdakilerden kaçabilirsiniz:

emacs -Q -l ~/.emacs.d/elpa/<pkg>-<vers>/<pkg>-autoloads.el

Bağımlılıklara dikkat etmeyeceği için "sık sık" dedim, bu nedenle bazı durumlarda -l ...gerekli diğer paketleri yüklemek için bu argümanlardan daha fazlasını eklemeniz gerekir.

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.