`use-package` con: config para establecer variables

9

Estoy tratando de usar use-packagepara configurar mi org-modeinicialización. Tengo lo siguiente en mi ~/.emacsarchivo:

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

Sin :configembargo, ninguna de esas cosas de inicialización se está ejecutando. ¿Tengo los nombres de paquete incorrectos o algo así? Me confundo un poco en los nombres de los paquetes vs. los nombres ELPA vs.

Ken Williams
fuente
Echar un vistazo a org.ely verá hacia el final: (provide 'org). Ese símbolo ( org) es la que se uso para cargar el paquete, como en: (require 'org). En última instancia, eso use-packagees lo que está haciendo, solo con algunas cosas útiles a su alrededor. Un paquete dado puede definir muchos modos, por lo que los nombres de paquete y modo no son siempre los mismos. Este es realmente el mismo problema que la otra pregunta sobre la html-modedefinición del sgml-modepaquete.
glucas
La "otra pregunta" @glucas menciona: emacs.stackexchange.com/q/10396/8899
Ken Williams

Respuestas:

18

Lo siguiente funcionaría. En aras de la claridad, estoy usando lo :ensure org-plus-contribque se desvía un poco del ejemplo en su pregunta.

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

Aquí hay algunas notas explicativas para lo anterior:

  • (use-package FEATURE-NAME
    • FEATURE-NAMEes lo que va en la (provide ..)línea de un paquete. Pues org-modeesa línea es (provide 'org).
  • :mode ((FILE-REGEXP . MAJOR-MODE))
    • FILE-REGEXPes la expresión regular para la que desea que se habilite un modo mayor en particular. Tenías que correcta: "\\.org$".
    • MAJOR-MODEes el nombre del modo principal que desea habilitar (incluida la -modeparte del nombre del modo principal). En este caso, el nombre del modo principal es org-mode.
    • El estilo :mode (FILE-REGEXP)que utilizó lo haría si sólo el trabajo FEATURE-NAMEy MAJOR-MODEson exactamente la misma. Ejemplo: cperl-mode.
  • :ensure PACKAGE-NAME
    • PACKAGE-NAMEes lo que veo en la lista de paquetes ( M-x package-list-packages). Para mayor claridad, en mi solución anterior, estamos instalando el paquete org-plus-contrib1 . Esto es para demostrar que el nombre de la función, el modo principal y el nombre real del paquete no tienen que ser exactamente iguales. ¡Y también prefiero instalarlo en lugar de simple, org-modeya que también obtienes todos los contrib/beneficios del paquete! :)

1 Deberá agregar (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)a su configuración de emacs para instalar org-plus-contrib. Consulte la página oficial de instalación del modo org para obtener más información.


Nota

La mejor manera de hacer use-packageque funcione el fragmento anterior es guardarlo primero en su configuración de emacs, luego eliminar las versiones anteriores de Package Manager instaladas orgy luego reiniciar emacs.

Kaushal Modi
fuente
Gracias: sigo teniendo problemas con un aspecto, conseguir que el soporte R de la organización funcione org-babel-do-load-languagesen este contexto, da el error Error (use-package): org :config: Invalid function: org-babel-header-args-safe-fn. Otros idiomas (por ejemplo, sho perlo emacs-lisp) parecen bien el trabajo.
Ken Williams
Eso parece un problema no relacionado. ¿Estás usando esa macro como estaba previsto? Puedes aprender más al respecto haciendo C-h f org-babel-header-args-safe-fn. Además, no tiene ese fragmento de código en su pregunta. Entonces es difícil adivinar lo que está pasando.
Kaushal Modi
Parece ser este problema: mail-archive.com/[email protected]/msg98818.html . No estoy seguro de cómo resolverlo todavía. Mi configuración completa está aquí: gist.github.com/kenahoo/8bca2ecc5cbe6e48a91c y comentar la (R . t)línea detiene el error. Así que sí, un problema no relacionado, creo. Podría necesitar abrir otra pregunta ...
Ken Williams
Parece que mi org-mode se rompió con la última actualización. Solucioné eso emacs -Qal comenzar a limpiar, cargar cuidadosamente mi 'packageconfiguración, desinstalar orgy org-plus-contribluego volver a instalarlos. El problema se explica aquí: emacs.stackexchange.com/a/13576/8899
Ken Williams
Ah, perdón por eso. Probablemente la instalación org-plus-contribestropeó la instalación de tu organización y terminaste teniendo una mezcla de versiones. por cierto, necesitas instalar solo org-plus-contrib. No necesita instalar el orgpaquete por separado también.
Kaushal Modi
4

Con la advertencia que no he usado use-packageantes, creo que quieres orgmás que org-mode. Estoy basando esto en el hecho de que, en mi Emacs, (package-installed-p 'org-mode)devuelve nulo mientras (package-installed-p 'org)que no.

Aaron Harris
fuente