Xuất gói cài đặt Emacs?


10

Tôi đang sử dụng emacs 24.4. Tôi đã thêm một số lượng lớn các gói được cài đặt thông qua chỉ thị gói danh sách Mx trong khoảng một năm sử dụng. Tôi rất thích xuất danh sách các gói đã cài đặt của tôi để sử dụng ở nơi khác. Sao chép .emacs của tôi cung cấp cho tôi một số lỗi khi khởi động, nó chạy bộ nhớ của tôi để cài đặt một số thứ. Tôi nghi ngờ tôi có thể sao chép .emacs.d, nhưng dường như đó có thể là một ý tưởng tồi.

Có một quy trình hoặc chỉ thị nào tôi có thể đưa ra để đưa danh sách các gói đã cài đặt vào một tệp có thể được sử dụng để nhận chúng trên các máy nước ngoài một cách dễ dàng không?



1
Sao chép .emacs.dthư mục của bạn (hoặc tốt nhất là đặt nó dưới sự kiểm soát phiên bản) nói chung là một ý tưởng tốt. (Cũng có thể đổi tên ~/.emacsthành ~/.emacs.d/init.elnếu bạn quyết định làm điều này.)
phils

Câu trả lời:


5

Thư mục ~/.emacs.d/elpachứa tất cả các gói được cài đặt với list-packages. Bạn có thể sao chép thư mục này qua.

Tôi có lẽ cũng sẽ chạy một cái gì đó như (byte-recompile-directory "~/.emacs.d/elpa" 0 t)( 0có nghĩa là không hỏi, tcó nghĩa là buộc biên dịch lại) để biên dịch lại mọi thứ bởi vì tôi tin rằng có một số sự không tương thích của các tệp được biên dịch byte giữa các phiên bản Emacs.


Tôi đã sử dụng chiến lược này nhiều lần kể từ khi đặt câu hỏi này. Cảm ơn các đầu vào.
sanimalp

4

Tôi đã xem qua các package.eltập tin và tìm thấy các biến package-alist. Đây dường như là danh sách tất cả các gói đã cài đặt, bao gồm các gói được yêu cầu bởi các gói mà bạn đã cài đặt.

Nếu tất cả những gì bạn muốn là một danh sách các tên gói được cài đặt, đoạn mã sau sẽ ghi tên của các gói từ danh sách này vào *Messages*bộ đệm.

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

Tôi không phải là lập trình viên Lisp nên tôi chắc chắn ai đó có thể viết phiên bản mã này tốt hơn nhiều.

Tôi cũng đã bắt đầu sử dụnggói sử dụng với :ensure ttùy chọn để cài đặt tất cả các gói của mình trên PC mới.


2

Một cách làm có thể là cài đặt gói nếu chưa được cài đặt, bạn nên cập nhật tệp init của mình và thêm các dòng đó:

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

Sửa đổi my-packagesbiến và thêm / xóa gói bạn muốn cài đặt. M-x describe-variable package-activated-listsẽ cung cấp cho bạn danh sách các gói hiện đang cài đặt của bạn.

Sau đó, điều duy nhất để chia sẻ là tập tin init của bạn. Tôi mong nó sẽ có ích.


Rất tiếc tôi thấy rằng bạn đã trả lời làm thế nào để loại bỏ danh sách. Có lẽ điều đó nên được làm nổi bật hơn trong câu trả lời của bạn?
verdammelt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.