Emacs 24: Carregando um pacote instalado via ELPA

12

Acabei de instalar o pacote cmake-mode no Emacs 24 usando:

M-x package-install cmake-mode

Eu posso ver o pacote em: ~/.emacs.d/elpa/cmake-mode-20110824 , e posso carregá-lo usando a instrução na seção Commentary: de ~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el :

;; Add this code to your .emacs file to use the mode:
;;
;;  (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;;  (require 'cmake-mode)
;;  (setq auto-mode-alist
;;        (append '(("CMakeLists\.txt\'" . cmake-mode)
;;                  ("\.cmake\'" . cmake-mode))
;;                auto-mode-alist))

No entanto, isso contradiz a instrução de uso na página EmacsWiki do ELPA:

... packages are initialized AFTER the init.el is loaded. This means you should NOT put package specific initialization into your init.el ...

Eu tenho a tendência de concordar com esta instrução porque adicionar ao meu arquivo ~/.gnu-emacs uma linha como:

(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

é feio e irá quebrar se e quando eu atualizar o pacote. No entanto, sem essa linha, não consigo usar cmake-mode .

Estou faltando alguma coisa aqui?

Notas:

  • Eu não fiz nada de estranho com package-enable-at-startup e seu valor é t .
  • Estou usando o prelúdio .
  • user-emacs-directory value é "~/.emacs.d/" (Obrigado @lawlist pela sugestão)
  • package-user-dir value é "~/.emacs.d/elpa"
por Chen Levy 13.08.2013 / 12:26

4 respostas

2

Eu instalei o cmake-mode com o marmalade-repo e dei uma olhada no cmake-mode-autoloads.el. Parece que o autor tomou uma decisão consciente not inclui tudo o que é necessário para a configuração dentro do arquivo de autoloads. No entanto, as instruções nas linhas 25 a 30 do cmake-mode.el estão corretas, citadas na sua pergunta. Se você usar as linhas 25 a 30 e definir o caminho corretamente, será necessário NÃO precisar de uma linha extra de código, como (add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/") .

Obviamente, você não desejaria usar /dir/with/cmake-mode - você deseja usar ~/.emacs.d/elpa/cmake-mode-20110824 sem um atalho no final.

(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\.txt\'" . cmake-mode)
                ("\.cmake\'" . cmake-mode))
              auto-mode-alist))

Você pode precisar excluir o diretório c-make-mode ... e tentar reinstalar se o código acima não funcionar (usando seu próprio caminho).

    
por 20.08.2013 / 08:32
3

Dada a natureza do wiki como repositório de meio código, metade aide-memoire para hackers do Emacs, você compreensivelmente ignorou este ponto:

it could be easier just to move package-initialize to another point during startup so you can (require) ELPA packages; this takes care of a lot of the described issues:

Isso é o que eu faço; um dos primeiros arquivos carregados pelo meu script init personalizado (cuja criação, de tudo que eu consigo reunir, é o pons asinorum de uso sério do Emacs 1 ) p>

(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)

e a partir daí eu simplesmente (require) dos pacotes ELPA que eu preciso. Isso também tem o benefício de permitir um controle mais refinado sobre o comportamento dos pacotes instalados pelo ELPA; se, por exemplo, eu quiser desabilitar um determinado pacote por enquanto, mas não desinstalá-lo completamente, é uma questão simples de comentar a chamada (require) relevante, onde o comportamento padrão exigiria a remoção completa do pacote do diretório ELPA. .

(1) Apesar da quase irresistível tentação, eu me neguei a nomear meu script de inicialização personalizado lightsaber.el .

    
por 14.08.2013 / 18:59
1

Você pode fazer toda a sua inicialização depois que os pacotes carregarem usando after-init-hook . De EmacsWiki :

;; init.el
(add-hook 'after-init-hook (lambda () (load "<real init file>")))
    
por 22.10.2014 / 03:27
0

Eu tive um problema parecido quando comecei a usar o ELPA. No meu caso, tive vários pacotes locais, pois não estavam presentes no ELPA.

E assim eu alterei o caminho de carregamento. Por alguma razão, load-path não é atualizado corretamente por package.el. Para resolver o problema tive que colocar (setq load-path (cons "~/.emacs.d" load-path)) após a chamada para package-initialize

    
por 08.05.2015 / 20:04