`use-package` with: config zum Setzen von Variablen

9

Ich versuche, use-packagemeine org-modeInitialisierung einzurichten . Ich habe Folgendes in meiner ~/.emacsDatei:

(use-package org-mode
  :mode "\\.org$"
  :ensure org
  :config
  (progn
    (setq org-log-done 'time)
    (setq org-confirm-babel-evaluate nil)
    (setq org-export-babel-evaluate nil)
    (setq org-html-validation-link nil)
    ;; ... more stuff
  )
)

Nichts davon :configwird jedoch ausgeführt. Habe ich die falschen Paketnamen oder so? Ich bin etwas verwirrt über Paketnamen vs. ELPA-Namen vs. Aufrufbefehle ....

Ken Williams
quelle
Werfen Sie einen Blick darauf org.elund Sie werden gegen Ende sehen : (provide 'org). Mit diesem Symbol ( org) würden Sie das Paket wie folgt laden : (require 'org). Das ist letztendlich das, was use-packagewir tun, nur mit ein paar nützlichen Dingen. Ein bestimmtes Paket kann viele Modi definieren, sodass die Paket- und Modusnamen nicht immer gleich sind. Dies ist wirklich das gleiche Problem wie die andere Frage html-modezur Definition durch das sgml-modePaket.
Glucas
Die "andere Frage" @glucas erwähnt: emacs.stackexchange.com/q/10396/8899
Ken Williams

Antworten:

18

Das Folgende würde funktionieren. Aus Gründen der Klarheit verwende ich :ensure org-plus-contribeine, die etwas von dem Beispiel in Ihrer Frage abweicht.

(use-package org
  :mode (("\\.org$" . org-mode))
  :ensure org-plus-contrib
  :config
  (progn
    ;; config stuff
    ))

Hier sind einige Erläuterungen zu den oben genannten Punkten:

  • (use-package FEATURE-NAME
    • FEATURE-NAMEist das, was in der (provide ..)Zeile eines Pakets steht. Denn org-modediese Zeile ist (provide 'org).
  • :mode ((FILE-REGEXP . MAJOR-MODE))
    • FILE-REGEXPist der reguläre Ausdruck, für den ein bestimmter Hauptmodus aktiviert werden soll. Sie hatten das richtig : "\\.org$".
    • MAJOR-MODEist der Name des Hauptmodus, den Sie aktivieren möchten (einschließlich des -modeTeils des Hauptmodusnamens). In diesem Fall lautet der Name des Hauptmodus org-mode.
    • Der Stil :mode (FILE-REGEXP), den Sie verwendet haben, würde nur funktionieren, wenn FEATURE-NAMEund MAJOR-MODEgenau der gleiche ist. Beispiel : cperl-mode.
  • :ensure PACKAGE-NAME
    • PACKAGE-NAMEist das, was ich in der Paketliste ( M-x package-list-packages) sehe . Aus Gründen der Klarheit installieren wir in meiner obigen Lösung das Paket org-plus-contrib1 . Dies soll zeigen, dass der Funktionsname, der Hauptmodus und der tatsächliche Paketname nicht exakt identisch sein müssen. Und ich bevorzuge es auch, das zu installieren, anstatt einfach zu sein, org-modeda Sie auch alle contrib/Paket-Goodies erhalten! :) :)

1 Sie müssen (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)Ihre Emacs-Konfiguration hinzufügen , um sie installieren zu können org-plus-contrib. Weitere Informationen finden Sie auf der offiziellen Installationsseite im Organisationsmodus.


Hinweis

Der beste Weg, um das obige use-packageSnippet zum Laufen zu bringen, besteht darin, es zuerst in Ihrer Emacs-Konfiguration zu speichern, dann frühere von Package Manager installierte Versionen von zu löschen orgund dann Emacs neu zu starten.

Kaushal Modi
quelle
Vielen Dank - ich habe immer noch Probleme mit einem Aspekt. Wenn ich die R-Unterstützung von org org-babel-do-load-languagesin diesem Zusammenhang zum Laufen bringe , wird der Fehler angezeigt Error (use-package): org :config: Invalid function: org-babel-header-args-safe-fn. Andere Sprachen (zB shoder perloder emacs-lisp) scheinen gut zu funktionieren.
Ken Williams
Das sieht nach einem nicht verwandten Thema aus. Verwenden Sie dieses Makro wie vorgesehen? Sie können mehr darüber erfahren, indem Sie dies tun C-h f org-babel-header-args-safe-fn. Außerdem haben Sie diesen Code-Ausschnitt nicht in Ihrer Frage. Es ist also schwer zu erraten, was los ist.
Kaushal Modi
Es scheint dieses Problem zu sein: mail-archive.com/[email protected]/msg98818.html . Ich bin mir noch nicht sicher, wie ich es lösen soll. Meine vollständige Konfiguration finden Sie hier: gist.github.com/kenahoo/8bca2ecc5cbe6e48a91c und das Auskommentieren der (R . t)Zeile stoppt den Fehler. Also ja, ein nicht verwandtes Problem, denke ich. Möglicherweise muss eine andere Frage geöffnet werden ...
Ken Williams
Es sieht so aus, als ob mein Organisationsmodus selbst mit dem neuesten Update kaputt gegangen ist. Es wurde behoben, dass beim emacs -QStarten der Bereinigung meine 'packageKonfiguration sorgfältig geladen , deinstalliert orgund org-plus-contribanschließend neu installiert wurde. Das Problem wird hier erklärt: emacs.stackexchange.com/a/13576/8899
Ken Williams
Ah, tut mir leid. Wahrscheinlich hat die Installation org-plus-contribIhre Organisationsinstallation durcheinander gebracht und Sie hatten eine Mischung aus Versionen. Übrigens müssen Sie nur installieren org-plus-contrib. Sie müssen das separate orgPaket auch nicht installieren .
Kaushal Modi
4

Mit der Einschränkung, die ich vorher nicht verwendet habe use-package, glaube ich, dass Sie orgeher wollen als org-mode. Ich stütze mich dabei auf die Tatsache, dass mein Emacs (package-installed-p 'org-mode)null zurückgibt, während (package-installed-p 'org)dies nicht der Fall ist.

Aaron Harris
quelle