Saya memiliki pengaturan berikut untuk paket (tidak yakin apakah ada yang disarankan lebih baik):
(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
; Apparently needed for the package auto-complete (why?)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(setq url-http-attempt-keepalives nil)
Saya memiliki tiga pertanyaan terkait dengan instalasi dan pembaruan paket.
Q1. Apakah ada cara untuk memperbarui daftar paket yang tersedia (dan versi terbaru) dan memperbarui paket tertentu?
Q.2 Apa perbedaan antara sumber paket berikut ?:
- ELPA,
- GNU
- selai jeruk
- melpa
Q.3 Apakah penting urutan mereka ditambahkan package-archives
?
package-archives
. Singkirkan arsip ELPA, yang tidak lagi dipelihara, dan arsip marmalade, yang merupakan paket usang dan duplikat tanpa bimbingan dan pemeliharaan yang jelas. Gunakan hanya arsip GNU standar, dan MELPA>(setq package-enable-at-startup nil)
jika ingin menelepon(package-initialize)
diri sendiri.Jawaban:
Untuk memperbarui daftar paket secara otomatis, hanya jika belum ada daftar paket , gunakan yang berikut ini:
Untuk memperbarui semua paket yang diinstal, ketik
package-list-packages
, yang akan membawa Anda ke*Packages*
buffer (dan juga perbarui daftar paket), lalu ketik U x.package-refresh-contents
tanpa syarat mencoba mengunduh daftar paket dari semua repo yang telah Anda tambahkanpackage-archives
;package-archive-contents
tidak ada nihil jika Anda sudah mengunduh daftar paket.ELPA adalah aslinya. Saya tidak berpikir itu benar-benar dipertahankan lagi, tetapi saya tidak yakin. Saya tidak menggunakannya.
GNU adalah "resmi". Itu dikelola bersama dengan Emacs, yang berarti segala sesuatu harus selalu berfungsi tetapi pembaruan dan paket baru tidak sering datang.
Selai jeruk pada dasarnya adalah situs web tempat Anda dapat mengunggah paket lengkap, dan itu akan ditambahkan ke repo marmalade. Anda tidak hanya mengirimkan tautan ke hulu paket, dan itu tidak cukup mengotomatiskan pembuatan paket sepenuhnya. Saya pikir ini adalah Hal yang Benar, karena Anda tidak perlu ingin melacak hulu. Sayangnya, sudah tidak terawat untuk sementara waktu, tetapi seseorang baru-baru ini mengambil alih sehingga harus kembali dan lebih baik di beberapa titik.
Melpa mengambil URL ke misalnya area lac EmacsWiki atau repo github, dan membangun sebuah paket secara otomatis darinya. Jadi biasanya paling tidak sehari di belakang apa pun yang dilacak. Meskipun trek upstream, saya tidak pernah punya masalah dalam praktek, dan ini adalah tempat sebagian besar paket saya berasal. Ada juga Melpa Stable , yang seperti Melpa tetapi mengambil revisi yang ditandai dari repo hulu alih-alih revisi terbaru. Melpa stable memiliki paket lebih sedikit daripada Melpa.
Mode org memiliki
package.el
repo sendiri ( http://orgmode.org/elpa/ ).Semua repo paket bekerja sama, Anda tinggal menambahkannya ke
package-archives
.Inilah posting blog yang lebih mendalam tentang subjek ini, yang sebagian besar saya setujui.
Saya tidak yakin, tapi saya pikir jika sebuah paket diduplikasi dalam berbagai repo, urutan repo muncul
package-archives
menentukan prioritas. Saya tidak tahu apakah prioritas yang lebih tinggi ada di awal atau akhir daftar.Pembaruan: Di Emacs 25, ada variabel
package-archive-priorities
yang dapat Anda gunakan untuk memprioritaskan repo paket Anda (mis. Lebih suka ELPA daripada MELPA).Inilah bagian yang relevan dari saya
init.el
, jika Anda tertarik:sumber
when (not package-archive-contents)
diperiksa?(refresh-package-contents)
tanpa syarat sebelum mengunduh paket baru, karena jika tidak Emacs dapat mencoba mengunduh versi paket lama (yang saat itu adalah 404), gagal, dan berhenti memuat.Di dalam Emacs, gunakan
M-x list-packages
untuk mendaftar semua paket yang secara otomatis akan me-refresh konten arsip. Setelah itu gunakanU
untuk menandai semua paket yang dapat diupgrade untuk ditingkatkan, danx
untuk benar-benar melakukan pembaruan baru. Emacs kemudian akan mengambil dan menginstal semua pemutakhiran, dan meminta Anda apakah akan menghapus versi lama yang sudah usang sesudahnya.Anda mungkin juga ingin melihatnya Karton yang menyediakan cara yang lebih mudah untuk mengelola paket Anda dengan mendeklarasikannya dalam file khusus, dan menyertakan klien baris perintah yang nyaman untuk menginstal dan memutakhirkan paket secara otomatis dengan cara ini.
Urutan
package-archives
tidak tidak peduli. Emacs mengagregasi konten semua arsip ke dalam satu daftar paket yang tersedia dan versi yang koheren, disimpan dipackage-archive-contents
.Setelah itu
package-install
, Emacs hanya akan memilih versi terbaru dari sebuah paket, terlepas dari arsip aslinya. Untuk kontrol lebih lanjut tentang asal paket, MELPA menyediakan paket melpa yang memungkinkan paket hitam atau daftar putih dari arsip yang ditentukan.sumber
S-u
lebih tepatnya.S-u
? Menu paket tidak menggunakan ikatan itu.Shift-u
dengan itu.Di terminal:
ini menempatkan Anda dalam buffer * paket *
emacs akan meminta Anda (y / n), menunggu pembaruan
ini akan mematikan * paket * buffer dan mengembalikan Anda kembali ke * scratch *
ini akan keluar dari emacs, dan membiarkan Anda meluncurkan kembali, tetapi Anda mungkin harus men-debug :(
2 ¢ saya
sumber
M-x package-refresh-contents
, saya diminta untuk mengetik "U" untuk menandai semua pembaruan, dan kemudian saya bisa mengetik "x" untuk menjalankan pembaruan.Ini lebih merupakan komentar panjang tentang jawaban jpkotta.
Ini adalah penyesuaian yang saya coba untuk jawaban jpkotta di atas:
(mengganti
(when (not package-archive-contents) (package-refresh-contents))
).Daftar paket tidak cukup menyegarkan untuk kasus penggunaan saya.
Saya belum mempertimbangkan apakah ada solusi yang lebih efisien untuk masalah saya; pertama, saya harus melihat apakah masalahnya hilang dengan penyesuaian ini.
sumber
package-archive-contents
-refresh hanya jika tidak ada. Idenya adalah bahwa Anda menyalin .emacs.d Anda ke mesin baru dan secara otomatis menginstal semua paket Anda, tetapi setelah itu Anda harus memperbarui secara manual. Saya mencoba memperbarui setiap dua minggu. Saya kira Anda menambahkan paket ke daftar Anda, tetapi Andapackage-archive-contents
terlalu tua untuk memilikinya?~/.emacs.d/elpa/
untuk lokasi paket. Namun, versi saya dari paket-install-code Anda ada di partisi "ketiga", (e:/emacs-config
atau/e/emacs-config/
). Jadi saya menambahkan paket ke daftar saat dalam satu OS, dan itu harus diperbarui ketika saya memuatEmacs
di OS lain. Pasti ada beberapa elemen berlebihan dalam solusi saya, tetapi tampaknya berfungsi setidaknya.package-archive-contents
sepertinya aku begitu gila membuatku lolos. Itu adalah masalah yang saya tidak mempersempit. Jika saya mencari dan menemukan solusi "lebih elegan" di masa depan, saya akan menambahkannya ke posting saya.(package-refresh-contents)
menulis untuk~/.emacs.d/elpa/archives
. Tidak jelas apakah Anda memiliki direktori yang dibagikan di antara OS. Saya akan merekomendasikan untuk tidak berbagielpa/
direktori, karenaelpa/
byacecode Emacs (kode dalam bytecompiled) tidak kompatibel ke belakang ( gnu.org/software/emacs/manual/html_node/elisp/… ). Anda harus memastikan bahwa kedua instalasi memiliki versi Emacs yang sama. Saya menjaga.emacs.d
kontrol versi saya , dan menyinkronkan berbagai instalasi dengan itu.