45 votes

Emacs 24 Colis De L'Initialisation Du Système Des Problèmes

Il me semble que le nouveau système de paquets qui est intégré sur Emacs 24 a quelques défauts quand il s'agit de bien le chargement et l'initialisation des paquets installés.

Récemment, j'ai mis à Emacs 24.1.1 qui a été realeased sur 6/10/2012 et j'ai essayé d'utiliser l'intégré dans le système de paquets et que vous avez installé plusieurs paquets à l'aide, mais ils ont tous un problème similaire liées à l'auto-chargement et l'initialisation.

Par exemple, j'utilise un package appelé smex qui offre des améliorations pour l'utilisation de l' M-x d'accord. Il vous oblige à définir une touche pour M-x, j'ai donc ajouté (global-set-key (kbd "M-x") 'smex) mon init.el le fichier. Mais après le démarrage de emacs j'appuie sur l' M-x d'accord et je reçois le message "Symbole de la définition de la fonction est nulle: smex" ... Si j'ai aussi mis (require 'smex) dans mon init.el fichier j'obtiens le message d'erreur "Fichier erreur: Impossible d'ouvrir le fichier de chargement, smex"

L'ajout de l'emplacement de smex à la charge de la variable de chemin fait il fonctionne comme prévu, cependant, qui semble à l'encontre de l'objectif d'avoir un système de paquets, en premier lieu...

Toutes les pensées? Est-il une meilleure façon ou vivons-nous avec cette limitation pour l'instant?

79voto

phils Points 30543

Il est intéressant de noter pourquoi Emacs reporte le paquet d'initialisation:

Voir C-hig (emacs) Package Installation RET, et en particulier:

La raison automatique de paquet de chargement se produit après le chargement de l'init fichier, c'est que les options de l'utilisateur seulement recevoir sur leurs valeurs après le chargement du fichier init, y compris les options de l'utilisateur qui affectent la système d'emballage. Dans certains cas, vous pouvez charger des packages explicitement dans votre fichier init (généralement parce que certains autres de code dans votre fichier init dépend d'un paquet). Dans ce cas, votre fichier init doit appeler la fonction package-initialize. C'est à vous pour s'assurer que pertinentes options de l'utilisateur, tels que package-load-list (voir ci-dessous), sont fixés avant l' package-initialize appel. Vous devez également définir package-enable-at-startup de nil, pour éviter de charger les paquets de nouveau après le traitement du fichier init. Alternativement, vous pouvez choisir de complètement inhiber paquet de chargement au démarrage, et d'invoquer la commande M-x package-initialize à la charge de votre colis manuellement.

Donc, à condition que vous assurez-vous que votre fichier init prend soin de toutes les non-valeurs par défaut que vous souhaitez pour les variables dans l' package personnalisation de groupe1 avant d'appeler package-initialize -- et que vous maintenez cette approche lors de la personnalisation de la bibliothèque de package config -- il devrait être d'accord pour ce faire.

Alternativement, car after-init-hook court après le paquet standard de l'initialisation soit terminée, vous pouvez l'utiliser pour évaluer les code d'initialisation qui dépend de paquets. Ainsi, au lieu de l'appel d' package-initialize directement dans l'init.el, vous pourriez écrire:

(add-hook 'after-init-hook 'my-after-init-hook)
(defun my-after-init-hook ()
  ;; do things after package initialization
  )

mettre le code nécessitant la initialisée système de paquets à l'intérieur de cette fonction.

YMMV.

(n.b. Je n'ai pas testé l'après-init approche, que je n'ai pas vraiment utiliser.el; mais je n'ai confirmer la séquence des événements dans les start-up du code, donc je crois qu'il va fonctionner comme décrit.)

1M-x customize-group RET package RET

42voto

Nicolas Dudebout Points 5457

Les paquets que vous avez installer avec package.el sont activés par défaut après votre .emacs est chargé. Pour être en mesure de les utiliser avant la fin de votre .emacs vous devez activer en utilisant les commandes:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X