Cài đặt thủ công một gói đa dịch vụ tới


7

Khi tôi đang viết một gói mới, thật tuyệt khi tôi có thể kiểm tra cài đặt của nó bằng cách chỉ phát hành M-x package-install-from-buffer. Điều này sẽ cài đặt gói với package.el, để nó đi theo "~/.emacs.d/elpa". Tuy nhiên, điều này không hoạt động trên các gói multifile.

Quy trình cài đặt tất cả .elcác tệp trong thư mục hiện tại là một gói đa biến đơn là gì?

Câu trả lời:


7

Emacs 25.1 hiện có tính năng này . Từ NEWStệp:

** package-install-from-bufferpackage-install-filelàm việc trên các thư mục. Điều này tuân theo các quy tắc tương tự như cài đặt từ một .tartệp, ngoại trừ -pkg.eltệp là tùy chọn.

Không có lệnh mới để nhớ. Chỉ cần phát hành package-install-from-buffertừ một bộ đệm dired, hoặc gọi package-install-filevà đưa ra một thư mục. Bất kỳ gói nào được chứa trong thư mục đó sẽ được đọc và cài đặt, có thể là đơn hoặc đa biến, không cần taring hoặc -pkg.eltập tin.


-pkg.elTập tin tùy chọn là thú vị. Các giá trị mặc định trong trường hợp đó là gì?
phils

@phils giống như các kho lưu trữ gói, nó tìm thấy một tệp elisp với tiêu đề gói hoàn chỉnh và tạo tệp -pkg từ đó.
Malabarba

1
Ah, tôi đã không nhận ra đó là cách chúng được tạo ra bình thường. Thay đổi của bạn làm cho ý nghĩa hoàn hảo, sau đó. Công việc tốt đẹp.
phils

Malabarba: Tôi nhận thấy rằng chuỗi doc hiện tại trong thân cây package-install-filekhông đề cập đến việc nó hoạt động cho các thư mục (mặc dù, như bạn đã nói, nó làm như vậy).
phils

@phils Cảm ơn bạn đã chú ý. Tôi đang sửa nó bây giờ.
Malabarba

1

package-install-from-buffer nói:

Bộ đệm hiện tại được coi là một tệp .el hoặc .tar tuân theo các nguyên tắc đóng gói

Vì vậy, một giả định bạn có thể lưu trữ thư mục (giả sử nó đáp ứng các tiêu chí), tải tệp tar vào Emacs và sử dụng package-install-from-buffernhư trước?

Chỉnh sửa: Hoặc, như lunaryorn chỉ ra, đừng truy cập kho lưu trữ trong Emacs và sử dụng package-install-file.


1
Âm thanh giống như một chức năng (tái) tar thư mục hiện tại và sau đó thực hiện cài đặt gói sẽ có ích.
glucas

1
Ngoài ra , M-x package-install-file.

Không hoạt động. Nó cố gắng tìm một paradox/paradox-pkg.eltập tin bên trong tarvà lỗi khi không có. Tương tự cho cả hai install-fileinstall-from-buffer. Tôi đoán tôi cần tạo -pkgtập tin này như một công thức sắp xếp.
Malabarba

1
@Malabarba Gói TAR phải có -pkgtệp, nếu không, đó không phải là gói hợp lệ, vì vậy chỉ cần tạo một thư mục ngẫu nhiên sẽ không hoạt động. Emacs phải có một số nơi để tìm siêu dữ liệu gói. Bạn có thể sử dụng MELPA package-buildhoặc caskđể tạo các gói TAR thích hợp từ cây thư mục.

Malabarba: Xem C-h i g (elisp) Multi-file Packagesđể biết chi tiết.
phils

1

package.elkhông có hỗ trợ tốt cho trường hợp sử dụng này. Bạn phải chạy lại package-install-from-buffermỗi lần bạn thực hiện cập nhật cho gói M-x find-functionvà bạn bè sẽ không chuyển sang mã nguồn, mà thay vào đó là bản sao package.elđưa vào ~/.emacs.d/elpa. Do đó, tôi khuyên bạn không nên sử dụng package.elcho trường hợp sử dụng này (hoặc hoàn toàn không có, vì nó có một số vấn đề khác).

Thay vào đó, bạn có thể thử trình quản lý gói của tôi straight.el, được thiết kế rõ ràng cho trường hợp sử dụng này. Với straight.el, không có thủ tục "cài đặt cục bộ". Bạn chỉ cần đặt kho lưu trữ của mình vào ~/.emacs.d/straight/repos/<my-package-repo>, sau đó tải gói trong tệp init của bạn:

(straight-use-package '(<my-package> :local-repo "<my-package-repo>"))

Bất cứ khi nào bạn thực hiệ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 (một khi bạn khởi động lại Emacs). Ngoài ra, bạn đang chạy trực tiếp từ kho Git, M-x find-functionvà bạn bè sẽ làm việc như mong đợi.

Cuối cùng, phiên bản địa phương và thượng nguồn hoàn toàn có thể thay thế cho nhau. straight.elcho phép bạn thực hiện bất kỳ thay đổi cục bộ nào bạn muốn và chúng được coi là thiêng liêng như thay đổi ngược dòng (mặc dù straight.elcho phép bạn tự động [và tương tác] hoàn nguyên kho lưu trữ của bạn thành phiên bản ngược dòng của chúng, nếu bạn muốn). Do đó, không có bất kỳ lo ngại nào khi thực hiện bất kỳ thay đổi nào đối với cấu hình của bạn nếu bạn muốn thực hiện phát triển cục bộ: chỉ cần thực hiện phát triển cục bộ. Và nếu bạn có một gói riêng mà bạn xuất bản, thì đó là chuyện nhỏ: chỉ cần đẩy gói đó đi đâu đó (và có thể cập nhật công thức trong tệp init của bạn để trỏ đến kho Git đó, để straight.elcó thể sao chép lại từ một máy khác).

Không giống như package.el, không có sự khác biệt trong việc xử lý các gói đa tệp và một tệp.

Để biết tài liệu dài dòng về straight.el, bao gồm so sánh với các trình quản lý gói khác, hãy xem README .

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.