Eksportować zainstalowane pakiety Emacsa?

10

Używam emacsa 24.4. Dodałem dużą liczbę zainstalowanych pakietów przez dyrektywę list-pack Mx w ciągu około roku użytkowania. Chciałbym wyeksportować listę zainstalowanych pakietów do użytku w innym miejscu. Kopiowanie moich plików .emacs powoduje błędy podczas uruchamiania, które pobudzają moją pamięć do zainstalowania pewnych rzeczy. Podejrzewam, że mógłbym skopiować plik .emacs.d, ale wydaje się, że to zły pomysł.

Czy istnieje procedura lub dyrektywa, którą mogę wydać, aby zrzucić listę zainstalowanych pakietów do pliku, którego można użyć w celu łatwego przeniesienia ich na maszyny zagraniczne?

sanimalp
źródło
1
Skopiowanie .emacs.dkatalogu (lub raczej poddanie go kontroli wersji) jest ogólnie dobrym pomysłem. (Jest to również rozsądne, aby zmienić nazwę ~/.emacs, aby ~/.emacs.d/init.el, jeśli zdecydujesz się to zrobić.)
phils

Odpowiedzi:

5

Katalog ~/.emacs.d/elpazawiera wszystkie zainstalowane pakiety list-packages. Możesz skopiować ten katalog.

Prawdopodobnie uruchomiłbym też coś w stylu (byte-recompile-directory "~/.emacs.d/elpa" 0 t)( 0oznacza, że ​​nie pytaj, toznacza wymuszenie ponownej kompilacji), aby wszystko skompilować bajtowo, ponieważ uważam, że istnieje pewna niezgodność plików skompilowanych bajtowo między wersjami Emacsa.

niania
źródło
Użyłem tej strategii kilka razy, odkąd zadałem to pytanie. Dzięki za wkład.
sanimalp
4

Przejrzałem package.elplik i znalazłem zmienną package-alist. Wygląda na to, że jest to lista wszystkich zainstalowanych pakietów, w tym pakietów wymaganych przez zainstalowane pakiety.

Jeśli wszystko, czego potrzebujesz, to lista zainstalowanych nazw pakietów, poniższy kod wypisze nazwy pakietów z tej listy do *Messages*bufora.

(dolist (p1 (sort (mapcar 'symbol-name (mapcar 'car package-alist)) 'string<))
  (message "%s" p1))

Nie jestem programistą Lisp, więc jestem pewien, że ktoś może napisać znacznie lepszą wersję tego kodu.

Zacząłem także używać kodu use-package z :ensure topcją, aby zainstalować wszystkie moje pakiety na nowym komputerze.

Colin Bell
źródło
2

Jednym ze sposobów może być instalacja pakietu, jeśli jeszcze nie został zainstalowany, należy zaktualizować plik init i dodać następujące wiersze:

(defvar my-packages
  '(color-theme db-pg db kv magit-push-remote magit-tramp
                magit git-rebase-mode git-commit-mode pg
                pretty-lambdada projectile pkg-info epl dash
                python-mode rich-minority s yasnippet yasnippet-bundle
                use-package key-chord undo-tree guide-key move-text
                openwith ack ag aggressive-indent nginx-mode multiple-cursors
                smartparens with-editor haskell-mode)
  "A list of packages to ensure are installed at launch.")

(defun my-packages-installed-p ()
  (loop for p in my-packages
        when (not (package-installed-p p)) do (return nil)
        finally (return t)))

(unless (my-packages-installed-p)
  ;; check for new packages (package versions)                                  
  (package-refresh-contents)
  ;; install the missing packages                                                                               
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

Zmodyfikuj my-packageszmienną i dodaj / usuń pakiet, który chcesz zainstalować. M-x describe-variable package-activated-listwyświetli listę aktualnie zainstalowanego pakietu.

Następnie jedyną rzeczą do udostępnienia jest plik init. Mam nadzieję, że to pomoże.

Nsukami _
źródło
Ups, widzę, że odpowiedziałeś, jak zrzucić listę. Być może powinno to być bardziej widoczne w twojej odpowiedzi?
verdammelt