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.


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.)


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.


Ich hatte keine Ahnung, dass ich kein Boolescher sein musste. Gut zu wissen!
wdkrnls


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.


Interessant, verwenden Sie Beiträge zur Bereitstellung von Funktionen?
wdkrnls

Ja, ein paar Dinge, obwohl ich mich momentan nicht daran erinnere, welche.
Joe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.