`use-package` com: config para definir variáveis

9

Estou tentando usar use-packagepara configurar minha org-modeinicialização. Eu tenho o seguinte no meu ~/.emacsarquivo:

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

:configPorém, nenhuma dessas coisas de inicialização está sendo executada. Os nomes dos pacotes estão errados ou algo assim? Fico um pouco confuso sobre nomes de pacotes vs. nomes ELPA vs. comandos de chamada ....

Ken Williams
fonte
Dê uma olhada org.ele você verá no final: (provide 'org). Esse símbolo ( org) é o que você usa para carregar o pacote, como em: (require 'org). Isso é o que use-packageestá fazendo, apenas com algumas coisas úteis a seu redor. Um determinado pacote pode definir vários modos para que os nomes dos pacotes e dos modos nem sempre sejam os mesmos. Este é realmente o mesmo problema que a outra pergunta sobre html-modeser definido pelo sgml-modepacote.
glucas
A "outra pergunta" @glucas menciona: emacs.stackexchange.com/q/10396/8899
Ken Williams

Respostas:

18

O abaixo funcionaria. Por uma questão de clareza, estou usando o :ensure org-plus-contribque se desvia um pouco do exemplo em sua pergunta.

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

Aqui estão algumas notas explicativas para o acima:

  • (use-package FEATURE-NAME
    • FEATURE-NAMEé o que se passa na (provide ..)linha de um pacote. Pois org-mode, essa linha é (provide 'org).
  • :mode ((FILE-REGEXP . MAJOR-MODE))
    • FILE-REGEXPé a expressão regular para a qual você deseja que um modo principal específico seja ativado. Você tinha que correta: "\\.org$".
    • MAJOR-MODEé o nome do modo principal que você deseja ativar (incluindo a -modeparte do nome do modo principal). Nesse caso, o nome do modo principal é org-mode.
    • O estilo :mode (FILE-REGEXP)que você usou funcionaria apenas se FEATURE-NAMEe MAJOR-MODEfor exatamente o mesmo. Exemplo: cperl-mode.
  • :ensure PACKAGE-NAME
    • PACKAGE-NAMEé o que vejo listado na lista de pacotes ( M-x package-list-packages). Para maior clareza, na minha solução acima, estamos instalando o pacote org-plus-contrib1 . Isso serve para demonstrar o nome do recurso, o modo principal e o nome do pacote real não precisa ser exatamente o mesmo. E também prefiro instalar isso em vez de simples, org-modepois você também recebe todos os contrib/presentes! :)

1 Você precisará adicionar (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)à sua configuração do emacs para instalar org-plus-contrib. Consulte a página de instalação oficial do modo organizacional para obter mais informações.


Nota

A melhor maneira de fazer o use-packagesnippet acima funcionar é salvá-lo primeiro na sua configuração do emacs, depois excluir as versões anteriores instaladas pelo Package Manager orge reiniciar o emacs.

Kaushal Modi
fonte
Obrigado - ainda estou tendo problemas com um aspecto, ao obter o suporte de R da organização para trabalhar usando org-babel-do-load-languagesneste contexto, ele fornece o erro Error (use-package): org :config: Invalid function: org-babel-header-args-safe-fn. Outros idiomas (por exemplo, shou perlou emacs-lisp) parecem funcionar bem.
Ken Williams
Parece um problema não relacionado. Você está usando essa macro como pretendido? Você pode aprender mais sobre isso fazendo C-h f org-babel-header-args-safe-fn. Além disso, você não tem esse snippet de código na sua pergunta. Portanto, é difícil adivinhar o que está acontecendo.
precisa
Parece ser este problema: mail-archive.com/[email protected]/msg98818.html . Ainda não sei como resolvê-lo. Minha configuração completa está aqui: gist.github.com/kenahoo/8bca2ecc5cbe6e48a91c e comentar a (R . t)linha interrompe o erro. Então sim, questão não relacionada, eu acho. Talvez seja necessário abrir uma outra questão ...
Ken Williams
Parece que meu próprio modo org quebrou com a atualização mais recente. Corrigido isso fazendo emacs -Qpara iniciar a limpeza, carregue cuidadosamente minha 'packageconfiguração, desinstalando orge org-plus-contribdepois reinstalando-as. O problema é explicado aqui: emacs.stackexchange.com/a/13576/8899
Ken Williams
Ah, desculpe por isso. Provavelmente a instalação org-plus-contribatrapalhou a instalação da sua organização e você acabou tendo uma mistura de versões. BTW, você precisa instalar apenas org-plus-contrib. Você não precisa instalar o orgpacote separado também.
precisa
4

Com a ressalva que eu não usei use-packageantes, acredito que você orgprefere org-mode. Estou baseando isso no fato de que, no meu Emacs, (package-installed-p 'org-mode)retorna nulo enquanto (package-installed-p 'org)não.

Aaron Harris
fonte