Noeud:drkm-config, Noeud « Next »:, Noeud « Previous »:drkm-compat, Noeud « Up »:Top



8 drkm-config

Ce module définit un framework de configuration d'Emacs. Il permet de configurer un mode (il devrait pouvoir configurer des packages, mais c'est pour l'instant plutôt des modes), cfr. `drkm-conf:configure()'. Il permet également de jouer au démarrage avec les fichiers subdirs.el et loaddefs.el, cfr. respectivement Config Subdirs et Config Loaddefs.

drkm-conf:init drkm-lib-dir Fonction
Dirige l'initialisation personnelle d'Emacs, comme le `load-path'. TODO: Fait beaucoup de choses. Cfr. pour l'instant sa docstring, Config Subdirs et Config Loaddefs.

drkm-conf:configure mode &key :config :auto-mode :interpreters :autoloads :autoload-files :font-lock :hooks :info-dirs Macro

Cette macro configure le mode `MODE', qui est un symbole non-quoté.

Elle évalue une et une seule fois ses arguments (sauf `MODE').

Elle délègue son travail aux fonctions, dans l'ordre, `drkm-conf::configure-impl()', `drkm-conf::configure-config()', `drkm-conf::configure-font-lock()', `drkm-conf::configure-hooks()', `drkm-conf:add-list-to-info-path()'. Voir la documentation de celles-ci pour plus de détails.

drkm-conf::configure-impl mode auto-mode interpreters autoloads autoload-files Fonction

drkm-conf::configure-config function feature Fonction
Si `FUNCTION' est nil, charge la `FEATURE'. Sinon, procède comme expliqué ci-desous.

`FUNCTION' est le symbole du mode à configurer, qui est une fonction. Il faut requérir la `FEATURE' lors du prochain appel de `FUNCTION'.

Selon la valeur de la function cell du symbole `FUNCTION', des choses différentes sont entreprises.

Si `FUNCTION' n'est pas liée à une fonction, on définit cette fonction, de manière à ce qu'à l'exécution, elle : (i) annulle sa définition (fboundp -> nil), (ii) charge la `FEATURE', (iii) exécute la fonction liée au symbole, avec les arguments reçus.

Il faut donc que la `FEATURE' définisse cette fonction. Par exemple en chargeant un module exécutant un `defun()' de cette fonction.

Si `FUNCTION' est un autoload, on remplace cette définition par une fonction qui, à l'éxécution : (i) replace l'autoload dans la définition de fonction du symbole, (ii) charge la `FEATURE', (iii) exécute la fonction liée au symbole, avec les arguments reçus.

La `FEATURE' peut donc définir cette fonction, par exemple en chargeant le module où elle est définie. Sinon, la définition sera trouvée en fonction de l'autoload initial.

Si `FUNCTION' est une fonction, on crée un advice en tête de cette fonction, qui : (i) se supprime des advices de cette fonction, (ii) charge la `FEATURE', (iii) exécute la fonction liée au symbole, avec les arguments reçus.

La `FEATURE' ne devrait donc pas redéfinir la fonction, puisqu'elle est déjà définie. Mais cela est possible.

Dans tous les cas, c'est donc le même schéma. On modifie la définition de fonction du symbole, de manière à ce qu'elle :

  • restaure la définition originale ;
  • charge la `FEATURE' ;
  • appelle effectivement la fonction avec les arguments qu'elle a elle-même reçus.

`FEATURE' est sensée configurer le mode `MODE', et la plupart du temps le définir. Si le module définissant `MODE' n'a pas encore été chargé, elle peut contrôler le moment du chargement. Donc exécuter ce qui doit l'être avant le chargement du module, puis le charger, et enfin exécuter ce qui doit l'être après le chargement :

          (code-to-execute-before ...)
          (setq the-variable ...)
          
          (require 'the-mode)
          
          (code-to-execute-after ...)
          (setq the-constant ...)
          
          (provide 'config-the-mode)
          

drkm-conf::configure-font-lock mode &optional keywords Fonction

drkm-conf::configure-hooks mode &optional values Fonction