Natknąłem się na błąd związany z interakcją między kilkoma pakietami. Aby zgłosić błąd, muszę podać powtarzalny przepis ilustrujący problem. Wymaga to załadowania odpowiednich pakietów, ale nic więcej od mojego init i żadnych innych pakietów. Jak najlepiej to zrobić?
AKTUALIZACJA
Aby to wyjaśnić, jestem zaznajomiony z koncepcją przeszukiwania moich .emacs podczas wyszukiwania binarnego w celu zidentyfikowania kodu powodującego problem. W tej sytuacji wiem już dokładnie, jakie pakiety powodują problem. Nie wiem, jak używać package-
systemu do ładowania tylko tych kilku pakietów.
(package-initialize)
załaduje pakiety, ale także wszystko inne w moim .emacs.d/elpa
katalogu. package-load-list
pozwala mi określić określone wersje pakietów do załadowania lub konkretne pakiety do jawnego wykluczenia . Potrzebuję odwrotnej strony - jak dostarczyć Emacsowi listę pakietów do włączenia , bez ładowania innych pakietów w systemie elpa / package.
źródło
.emacs
pliku - zainstaluj każdy pakiet jeden po drugim, a następnie sprawdź, czy problem nadal występuje. Możesz zaskoczyć siebie i znaleźć odpowiedzialnego pakietu, który nie gra dobrze z innym pakietem. Kiedy zaszedłeś tak daleko, jak to możliwe, napisz kroki, które wykorzystałeś do odtworzenia problemu i prześlij raport o błędzie - np. Zaczynając od Emacsa-Q , zainstaluj pakiet A, następnie zainstaluj pakiet B, a następnie zainstaluj pakiet C, następnie otwórz*Scratch*
bufor i wpisz ...comment-region
aby skomentować (lubC-u
cofnąć komentarz) region tekstu.package-load-list
jest sposobem na jawne dołączenie pakietów, wystarczy usunąćall
symbol.Odpowiedzi:
package-load-list
Zmienna może być użyta do określenia dokładnie jakie pakiety i wersje załadować:Jedyną rzeczą, na którą należy zwrócić uwagę, jest to, że domyślna wartość obejmuje
all
, jeślisetq
to zrobisz, wszystko będzie dobrze, ponieważ całkowicie zastąpi pierwotną wartość.źródło
Opcją, która działałaby dobrze w kontekstach, w których programiści zajmujący się odtwarzaniem błędu mogą nie mieć (lub nie chcieć) tych zainstalowanych zależności, jest użycie
try
pakietu ( https://melpa.org/#/try ). Inni mogą ładować pakiety z zarządzania pakietami bez modyfikowania ich instalacji lokalnej.źródło
Ten przypadek użycia jest strasznym niedoborem
package.el
, więc nie używajpackage.el
. Zamiast tego użyj menedżera pakietów, takiego jakstraight.el
(jestem autorem), który został specjalnie zaprojektowany do obsługi tego przypadku użycia.Pełna dokumentacja dotycząca
straight.el
, w tym porównań z innymi menedżerami pakietów, znajduje się w pliku README . Poniżej zacytowałem sekcję dotyczącą twojego pytania.Używanie
straight.el
do odtwarzania błędówJednym z głównych powodów, dla których chciałem napisać,
straight.el
było to, że istniejące menedżery pakietów nie nadawały się do odtwarzania błędów. Na przykład niektóre z nich ładowałyby wszystkie zainstalowane pakiety podczas inicjowania menedżera pakietów! Oczywiście nie jest to dopuszczalne w przypadku „minimalnego przypadku testowego”.Przeciwnie, ładowanie początkowe
straight.el
nie ładuje niczego pozastraight.el
sobą (domyślne repozytoria receptur są rejestrowane, ale nie klonowane dopóki nie będą potrzebne). Zwykle powinieneś się ładowaćstraight.el
za pomocą fragmentu bootstrap , ale kiedy jesteś w tymemacs -Q
miejscu, możesz zainicjowaćstraight.el
:Możesz to również zrobić z wiersza poleceń, być może tworząc dla niego alias:
Załóżmy, że tworzysz raport o błędzie dla pocisku. Aby załadować tylko pocisk i wszystkie jego zależności, uruchom:
Zauważ, że użyje to obecnie sprawdzonych wersji pocisku i wszystkich jego zależności, więc powinieneś je zanotować, aby sporządzić raport o błędzie.
źródło
Gdy potrzebujesz go jednorazowo (np. W celu przetestowania przepisu w celu odtworzenia błędu), często możesz uniknąć:
Powiedziałem „często”, ponieważ nie zwróci uwagi na zależności, więc w niektórych przypadkach będziesz musiał dodać więcej tych
-l ...
argumentów, aby załadować inne potrzebne pakiety.źródło