`use-package` avec: config pour définir les variables

9

J'essaie d'utiliser use-packagepour configurer mon org-modeinitialisation. J'ai les éléments suivants dans mon ~/.emacsdossier:

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

:configCependant, rien de tout cela n'est initialisé. Est-ce que les noms de colis sont incorrects ou quelque chose? Je suis un peu confus entre les noms de package, les noms ELPA et les commandes d'invocation ....

Ken Williams
la source
Jetez un oeil à org.elet vous verrez à la fin: (provide 'org). Ce symbole ( org) est ce que vous utilisez pour charger le paquet, comme dans: (require 'org). C'est finalement ce qui use-packagese passe, juste avec quelques trucs utiles autour. Un package donné peut définir de nombreux modes, de sorte que les noms de package et de mode ne sont pas toujours les mêmes. C'est vraiment le même problème que l'autre question sur la html-modedéfinition du sgml-modepackage.
glucas
L '"autre question" @glucas mentionne: emacs.stackexchange.com/q/10396/8899
Ken Williams

Réponses:

18

Ce qui suit fonctionnerait. Par souci de clarté, j'utilise :ensure org-plus-contribce qui s'écarte un peu de l'exemple de votre question.

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

Voici quelques notes d'explication pour ce qui précède:

  • (use-package FEATURE-NAME
    • FEATURE-NAMEc'est ce qui se passe dans la (provide ..)ligne d'un paquet. Car org-mode, cette ligne est (provide 'org).
  • :mode ((FILE-REGEXP . MAJOR-MODE))
    • FILE-REGEXPest l'expression régulière pour laquelle vous souhaitez activer un mode majeur particulier. Vous avez eu ce exact: "\\.org$".
    • MAJOR-MODEest le nom du mode principal que vous souhaitez activer (y compris la -modepartie du nom du mode principal). Dans ce cas, le nom du mode principal est org-mode.
    • Le style :mode (FILE-REGEXP)que vous avez utilisé ne fonctionnerait que si FEATURE-NAMEet était MAJOR-MODEexactement le même. Exemple: cperl-mode.
  • :ensure PACKAGE-NAME
    • PACKAGE-NAMEest ce que je vois dans la liste des paquets ( M-x package-list-packages). Pour plus de clarté, dans ma solution ci-dessus, nous installons le package org-plus-contrib1 . Il s'agit de démontrer le nom de la fonctionnalité, le mode principal et le nom du package réel ne doivent pas être exactement les mêmes. Et je préfère également installer cela au lieu de plaine org-modecar vous obtenez également tous les contrib/goodies du package! :)

1 Vous devrez ajouter (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)à votre configuration emacs pour installer org-plus-contrib. Voir la page d'installation officielle en mode org pour plus d'informations.


Remarque

La meilleure façon de faire fonctionner l' use-packageextrait ci-dessus consiste à l'enregistrer d'abord dans votre configuration emacs, puis à supprimer les versions antérieures de Package Manager installées org, puis à redémarrer emacs.

Kaushal Modi
la source
Merci - j'ai toujours des problèmes avec un aspect, obtenir le support R de l'organisation pour travailler org-babel-do-load-languagesdans ce contexte, cela donne l'erreur Error (use-package): org :config: Invalid function: org-babel-header-args-safe-fn. D'autres langues (par exemple shou perlou emacs-lisp) semblent bien fonctionner.
Ken Williams
Cela ressemble à un problème sans rapport. Utilisez-vous cette macro comme prévu? Vous pouvez en apprendre plus à ce sujet en faisant C-h f org-babel-header-args-safe-fn. De plus, vous n'avez pas cet extrait de code dans votre question. Il est donc difficile de deviner ce qui se passe.
Kaushal Modi
Il semble que ce soit ce problème: mail-archive.com/[email protected]/msg98818.html . Je ne sais pas encore comment le résoudre. Ma configuration complète est ici: gist.github.com/kenahoo/8bca2ecc5cbe6e48a91c et commenter la (R . t)ligne arrête l'erreur. Donc oui, un problème sans rapport avec moi je pense. Pourrait avoir besoin d'ouvrir une autre question ...
Ken Williams
On dirait que mon mode org lui-même a rompu avec la dernière mise à jour. Fixe en faisant emacs -Qcommencer propre, charger soigneusement ma 'packageconfiguration, la désinstallation orget org-plus-contrib, puis les réinstaller. Le problème est expliqué ici: emacs.stackexchange.com/a/13576/8899
Ken Williams
Ah, désolé pour ça. L'installation a probablement org-plus-contribgâché l' installation de votre organisation et vous avez fini par avoir un mélange de versions. btw, vous devez simplement installer org-plus-contrib. Vous n'avez pas besoin d'installer le orgpackage séparé également.
Kaushal Modi
4

Avec la mise en garde que je n'ai pas utilisée use-packageauparavant, je pense que vous voulez orgplutôt que org-mode. Je fonde cela sur le fait que, sur mon Emacs, (package-installed-p 'org-mode)retourne zéro alors (package-installed-p 'org)que non.

Aaron Harris
la source