Ich verwende package
, um meine Emacs-Erweiterungen zu verwalten. Um meine Emacs-Einstellungen auf verschiedenen Computern zu synchronisieren, möchte ich eine Liste von Paketnamen in der .emacs
Datei angeben und dann package
die Pakete automatisch suchen und installieren, sodass ich sie nicht manuell durch Aufrufen installieren muss M-x package-list-packages
. Wie geht das?
123
Antworten:
quelle
package
.package-refresh-contents
würde es nur ausgeführt, wenn das Paket nicht installiert ist? Wie ist es(or (file-exists-p package-user-dir))
besser / wie wird überhaupt geprüft, ob Pakete installiert sind?package-refresh-contents
. Dies wird wahrscheinlich nur ausgeführt, wenn Sie Emacs zum ersten Mal auf einem neuen Computer öffnen, und damit bin ich einverstanden. Wenn ein Paket aktualisiert werden muss, kann dies manuell erfolgen.use-package
, können Sie das:ensure
Schlüsselwort verwenden, um Pakete automatisch zu installieren. Dies wird auch eingerichtet,package-selected-packages
wenn Sie über Anpassen oder programmgesteuert auf die Paketliste zugreifen müssen.Basierend auf Kommentaren von Profpatsch und Antworten unten:
quelle
or
? Oh wow.mapc
ist für Nebenwirkungen. Aber warum nicht verwendenunless
?(package-initialize)
vor dem Verweis aufpackage-user-dir
Emacs 25.1+ verfolgt automatisch die vom Benutzer installierten Pakete in der anpassbaren
package-selected-packages
Variablen.package-install
aktualisiert die Anpassungsvariable und Sie können alle ausgewählten Pakete mit derpackage-install-selected-packages
Funktion installieren .Ein weiterer praktischer Vorteil dieses Ansatzes besteht darin, dass Sie
package-autoremove
Pakete, die nicht in enthalten sind, automatisch entfernen könnenpackage-selected-packages
(obwohl Abhängigkeiten erhalten bleiben).Quelle: http://endlessparentheses.com/new-in-package-el-in-emacs-25-1-user-selected-packages.html
quelle
Hier ist der Code, den ich für Emacs Prelude verwende :
Wenn Sie MELPA nicht verwenden, müssen Sie es nicht benötigen (und wenn Sie dies tun, müssen Sie
melpa.el
es auf Ihremload-path
Computer haben (oder über MELPA installiert haben). Das Paket db wird nicht jedes Mal aktualisiert (da dies den Start erheblich verlangsamen würde ) - nur wenn deinstallierte Pakete vorhanden sind.quelle
Noch hat niemand Cask erwähnt , aber es ist für diese Aufgabe durchaus geeignet.
Grundsätzlich erstellen Sie eine
~/.emacs.d/Cask
Liste der Pakete, die Sie installieren möchten. Beispielsweise:Wenn Sie
cask
über die Befehlszeile ausgeführt werden, werden diese Pakete und alle erforderlichen Abhängigkeiten für Sie installiert.Sie können installierte Pakete auch automatisch mit aktualisieren
cask update
.quelle
/path/to/emacs -Q --script /path/to/cask/cask-cli.el -- [args]
Rufen Sie
package-install
mit dem Paketnamen als Symbol auf. Sie können die Paketnamen für Ihre Pakete finden, indem Siepackage-install
interaktiv aufrufen und den Namen eingeben. Die Funktionpackage-installed-p
informiert Sie, wenn sie bereits installiert wurde.Beispielsweise:
quelle
error: Package
erhalten + 'steht nicht zur Installation zur Verfügung`. dired + ist ein Paket, das ich mit Ihrem Code ausprobiert habe.dired+
angezeigt, wenn Sie laufenpackage-list-packages
? Ich glaube, Sie müssen entweder Marmelade oder Melpa zu Ihrem hinzufügenpackage-archives
. Wenn ja, kannst du rennen(package-install 'dired+)
?(package-installed-p 'dired+)
sollte zurückgegeben werdent
und es wird im obigen Code übersprungen.package-installed-p
alleine funktioniert gut, aber der ganze Codeblock nicht. Ich habe mehrere Pakete ausprobiert.quelle
Ich überprüfe gerne, ob der Benutzer die Pakete zuerst installieren möchte, wie in dieser Antwort beschrieben . Außerdem aktualisiere ich meinen Paketinhalt einmal, bevor ich etwas installiere. Ich bin mir nicht sicher, ob dies der beste Weg ist, aber ich glaube nicht, dass die besten Antworten dies für mich getan haben.
quelle
Ich lief in ein Problem , dass nichts passiert nach dem Hinzufügen
(package-install 'org)
in.emacs
. Ich wollte die aktuelle Version von installierenorg-mode
und die eingebauteorg-mode
ist ziemlich alt.Ich habe den Quellcode
package-install
von Emacs 25.3.1 ausgegraben. Die Funktion selbst prüft bereits, ob ein Paket installiert ist oder nicht, und lehnt die Installation ab, wenn das Paket bereits installiert ist. Der Scheck(unless (package-installed-p package) ...)
aus Antwort 10093312 ist also in der Tat unangebracht.Das integrierte Gerät gilt
org-mode
auch als installiert undpackage-install
weigert sich, die neuere Version von ELPA zu installieren. Nachdem ich einige Zeit damit verbracht hatte, package.el zu lesen, kam ich auf die folgende Lösung.Der Grund, warum es funktioniert, ist, dass
package-*
Familienfunktionen die Argumente unterschiedlich behandeln, je nachdem, ob es sich um ein Symbol oder einpackage-desc
Objekt handelt. Sie können Versionsinformationen nurpackage-install
über einpackage-desc
Objekt angeben .quelle
Hier ist meins, es ist kürzer :)
quelle
Hier ist ein anderer Weg.
quelle