Làm cách nào để tạo và kích hoạt tự động tải cho các gói cục bộ?


9

Rõ ràng là không phải tất cả các gói địa phương / tùy chỉnh / cá nhân nên được phát hành chính thức và sẽ thật ngớ ngẩn nếu chỉ để hưởng lợi từ hỗ trợ quản lý gói tích hợp. Tôi đang tự hỏi làm thế nào để tạo và kích hoạt tự động tải cho các gói cục bộ? Điều đó tương tự như cách package.elthực hiện đối với các gói đã cài đặt từ ELPA. Để tránh phát minh lại bánh xe, có cách nào để nó "giả vờ" rằng một số thư mục cục bộ (với các thư mục con mỗi gói là gói địa phương / tùy chỉnh / cá nhân) là ELPA không? Tôi cũng sẵn sàng el-getnếu một kịch bản như vậy có thể được hỗ trợ thông qua, ví dụ, các công thức nấu ăn tùy chỉnh.

Tôi chắc chắn rằng nhiệm vụ này khá phổ biến và bất kỳ ai sử dụng Emacs ở cấp độ nâng cao đều đến điểm đó sớm hay muộn. Bất cứ ai có thể chia sẻ kinh nghiệm của họ trong lĩnh vực này?


3
update-directory-autoloadscó thể được sử dụng độc lập với bất kỳ trình quản lý gói.
npostavs

@npostavs, tôi biết nhưng nó không đệ quy và nó không phải là giải pháp toàn diện trong trường hợp này. Để chắc chắn rằng nó sẽ không đủ và tôi sẽ phải gói nó vào việc thực hiện của riêng tôi.
Alexander Shukaev

1. Bạn có thể cung cấp một danh sách các thư mục (ví dụ: một thư mục và hậu duệ của nó) để update-directory-autoloads, thực tế, làm cho nó đệ quy. 2. Bạn có thể sử dụng update-file-autoloadscho mọi tệp bạn quan tâm, bất kể thư mục đó nằm ở đâu.
Drew

FYI: package.elcũng không đệ quy (nghĩa là nó không hỗ trợ các gói với các nguồn trong thư mục con).
npostavs

Tôi đã thiết lập một MELPA cục bộ trên Linux. Tôi không có bất kỳ giải pháp tốt cho cửa sổ. Tôi thực sự mong muốn emacs sẽ hỗ trợ loại điều này ra khỏi hộp. Có thể đáng để kiểm tra gói sử dụng để xem nếu nó có thể.
eflanigan00

Câu trả lời:


7

Giải pháp chính xác (IMO) là sử dụng trình quản lý gói có hỗ trợ rõ ràng cho trường hợp sử dụng này. Đây sẽ là straight.el, mà tôi đã viết cho mục đích này.

Bạn có thể đọc tài liệu dài dòng, bao gồm so sánh với các trình quản lý gói khác, trong README , vì vậy tôi sẽ tuân theo cách bạn có thể sử dụng straight.elđể giải quyết vấn đề cụ thể của mình.

  1. Đặt kho lưu trữ của bạn trong ~/.emacs.d/straight/repos/<my-repo>.
  2. Tải nó bằng cách sử dụng

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Bạn đã hoàn tất. Bất cứ khi nào bạn thay đổi mã nguồn, việc tạo tự động tải và biên dịch byte sẽ được làm lại (ở lần khởi động Emacs tiếp theo). Bạn cũng nhận được những thứ như quản lý phụ thuộc, tự động kiểm soát phiên bản tùy chọn, v.v. miễn phí.

  4. Khi (nếu) bạn muốn xuất bản gói, chỉ cần đẩy nó ở đâu đó và sửa đổi công thức để trỏ đến kho Git đó.
  5. Bạn cũng có thể sử dụng straight.elvới use-packagenếu bạn thích (đó chỉ là cú pháp đường cho hầu hết các phần).

3

Tôi làm như sau trên Linux:

Tôi thiết lập một kho lưu trữ melpa cục bộ bằng cách nhân bản melpa.

Tôi sửa đổi các công thức nấu ăn tôi muốn chỉ đến các gói địa phương của tôi. Sau đây làlocal-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

Sau đó, từ loại local-mepla make allhoặc make recipies/ace-windowđể xây dựng (các) gói tronglocal-melpa/packages

Sau đó make packages/archive-contents, trong đó liệt kê danh sách các gói.

Sau đó, sử dụng để làm theo để nói với emacs sử dụng melpa địa phương của tôi

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

Tôi chưa tìm ra cách chạy maketrên windows. Nhưng tôi có thể xây dựng các gói trong local-melpaLinux và sao chép nó lên windows và emacs hiểu và cài đặt các gói đúng cách.

Lợi ích của việc này là tôi có thể thiết lập lại bất cứ lúc nào tôi muốn bằng cách xóa ~/.emacs.d/elpa/*thư mục của mình và cài đặt mọi cập nhật tùy chỉnh cho bất kỳ gói nào.


Có lẽ quelpa cũng sẽ được quan tâm?
npostavs

Tôi nghĩ rằng bạn là npostavs đúng. Tôi phải ngồi xuống và nhìn nó.
eflanigan00

2

Nếu bạn đã thay thế một gói đã được cài đặt bằng một phiên bản khác và tất cả những gì bạn thiếu là tệp tự động tải, bạn có thể sử dụng gói tạo-tự động tải để tạo gói:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

Tôi thấy nó dễ dàng hơn sau đó sử dụng update-thư mục-autotools khi tôi cần hạ cấp một gói xuống phiên bản cũ hơn.

Thật ra tôi nghĩ tôi chưa thực sự trả lời câu hỏi của bạn. Tôi sẽ để câu trả lời này ở đây vào lúc này nhưng câu trả lời của tôi có liên quan hơn ở đây: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

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.