org-plus-contrib und org mit `require` oder` use-package`

8

Wie kann ich sicherstellen, dass ich org-plus-contribmit requireoder aus dem Organisationsmodus-Repository herunterlade und verwende use-package? Package.ellädt das Paket herunter, kompiliert alles und sagt dann, dass es nicht geladen werden kann org-plus-contrib. Dieser Thread auf der Mailingliste behandelt ein ähnliches, aber umgekehrtes Problem. Wenn ich jedoch platziere (use-package org ..., wird use-packagezurückgegeben t, aber dies geschieht unabhängig davon, ob org-plus-contribes installiert ist oder nicht.

wdkrnls
quelle
Warum nicht einfach (use-package org-plus-contrib :ensure t)? Zugegeben, ich verwende ein Fass mit Palette für die Paketverwaltung, aber es platziert /home/kmicu/.emacs.d/.cask/24.4.1/elpa/org-plus-contrib-20150202 in meinem Pfad und lädt es.
kmicu
Denken Sie daran , dass org-plus-contrib enthält org Dateien sowie alle Beiträge von Dateien. Sie sollten org xor org-plus-contrib installieren , aber nicht beide.
kmicu
Vielleicht können Sie versuchen mitpackage-pinned-packages
csantosb

Antworten:

4

Ich bin mir nicht hundertprozentig sicher, ob Sie wirklich nur mit requireoder use-package... wirklich zuverlässig prüfen können. Wenn Sie jedoch package.el für die Funktionalität im Organisationsmodus verwenden, muss Ihre Konfiguration im Organisationsmodus möglicherweise verschoben werden, bis Ihre Pakete initialisiert wurden. Sie können dies mit einem Hook tun, der ausgeführt wird, nachdem Emacs mit dem Namen " after-init-hook" initialisiert wurde .

Damit...

Das heißt, in Ihrem .emacsbrauchen Sie einen Haken wie:

(add-hook 'after-init-hook 'package-config)

Und woanders:

(defun package-config ()
;;Your org-mode config goes here.
)

Danach haben Sie Zugriff auf die Überprüfungs- und Download-Funktionen von package.el ...

Da Sie also auch die Existenz des Pakets überprüfen möchten, können Sie " (package-installed-p 'org-plus-contrib)" verwenden und es mit " (package-install package)" installieren, wenn es nicht vorhanden ist.

Insgesamt würde der Code wahrscheinlich ungefähr so ​​aussehen:

(defun package-config ()
  (unless (package-installed-p 'org-plus-contrib)
    (package-refresh-contents)
    (package-install 'org-plus-contrib)))

(add-hook 'after-init-hook 'package-config)

Der Rest Ihrer Konfiguration ist hinter dem (unless ...)Körper her.

Auf diese Weise erhalten Sie Ihre Konfiguration, Ihre Paketinstallation wird überprüft und automatisch heruntergeladen, sodass Sie davon ausgehen können, dass alles, was über diese Zeile in der Funktion hinausgeht, die geladenen Beiträge verwenden kann. (Angenommen, Sie haben eine Netzwerkverbindung, falls diese nicht vorhanden ist.)

Archenoth
quelle
17

Der richtige Weg, dies mit dem Use-Package zu tun, ist wie folgt:

(use-package org
  :ensure org-plus-contrib
 ...

Das erste Argument stellt sicher, dass es sich um die Datei org.el handelt, die bezogen wird. Das Argument: verify stellt sicher, dass Sie die Version mit allen Extras erhalten. Natürlich müssen Sie auch eine ("org" . "http://orgmode.org/elpa/")Liste in Ihrem Paketarchiv haben.

Spencer Boucher
quelle
Ich hatte keine Ahnung, dass ich kein Boolescher sein musste. Gut zu wissen!
wdkrnls
Referenz: orgmode.org/elpa.html
Alfred M.
Ich verwende dies in meiner Konfiguration, aber wenn ein Paket eines Drittanbieters (z. B. elfeed-org) mit use-package installiert wird, wird die Standardorganisation heruntergeladen und installiert. Das kann nicht richtig sein, irgendwelche Ideen, wie ich das verhindern kann?
andreas-h
0

Ich führe eine Paketinstallation org-plus-contrib manuell durch, verwende dann aber die Verwendung der Paketorganisation org. Schließlich zeigt eine nachfolgende Mx-Organisationsversion an, dass die von org-plus-contrib bereitgestellte Organisation tatsächlich verwendet wird und alles in Ordnung ist.

Joe
quelle
Interessant, verwenden Sie Beiträge zur Bereitstellung von Funktionen?
wdkrnls
Ja, ein paar Dinge, obwohl ich mich momentan nicht daran erinnere, welche.
Joe