OVH Cloud OVH Cloud

modulariser sa configuration

1 réponse
Avatar
Sébastien Kirche
Bonjour,

dans le cadre des récents fils sur l'intégration de version custom ou cvs à
la configuration standard, de la modification des paths, etc., je suis en
train de remanier mes fichiers de configuration.

Je profite avec bonheur des trucs et conseils que vous me prodiguez ici
ainsi que de parfois de fonctions entières. Habituellement je place ces
fonctions vers la fin du .emacs mais ça commence à grossir.

Second problème : drkm me conseillait dernièrement une fonction pour
modifier le load-path que je devrais placer en début de mon .emcs mais je ne
trouve pas cette idée élégante et ça nuit à la lisibilité (àma) du fichier.

Est-il possible d'appeler en début de fichier une fonction qui n'est définie
que plus tard dans le fichier ?

Faudrait-il plutôt regrouper cette fonction avec d'autres à venir dans un
autre module et passer par un require ?

Quels conseils ou réflexions pouvez-vous me donner concernant l'organisation
des fichiers de conf ? Je sais que certains d'entre vous (drkm, zeDek) sont
en plein dedans, alors c'est le moment d'en parler :)

(Je précise que je suis développeur et que j'essaie d'améliorer mon niveau
de lisp pour pouvoir écrire du code au lieu de simplement deviner le
fonctionnement de modules et bricoler ma config, aussi je n'ai rien contre
mettre les mains dans le cambouis et taper du code pour arriver à ce que je
recherche)

Merci.

--
Sébastien Kirche

1 réponse

Avatar
drkm
Sébastien Kirche wrote:

Second problème : drkm me conseillait dernièrement une


fonction pour
modifier le load-path que je devrais placer en début de mon .emcs


mais je ne
trouve pas cette idée élégante et ça nuit à la lisibilité


(àma) du fichier.

Est-il possible d'appeler en début de fichier une fonction qui n'est


définie
que plus tard dans le fichier ?



Non. Personnellement, je trouve qu'un point extremement important
est la decoupe du code. Le fait d'avoir une section de "pre-requis"
n'est pas tres grave, si tu utilises les commentaires qui vont bien
pour avoir une decoupe interessante :

;;; Pre-requis.
[...]
;;; Edition de texte.
[...]
;;; Langages de programmation.
[...]

Faudrait-il plutôt regrouper cette fonction avec d'autres à venir


dans un
autre module et passer par un require ?



C'est le pas supplementaire. Partant de la decouope ci-dessus, tu
peux utiliser plusieurs fichiers. Cela a le merite de clarifier un
peu ces fichiers s'il deviennent trop gros.

Mais surtout, tu peux te developper tes outils pour afire en sorte
que tout ne soit pas charge inconditionnellement. Mais seulement
lorsque tu l'utilises. Mon propre .emacs (hors commentaires), ne
contient que :

(let ((drkm-lib-dir "~/.emacs.d/home-lisp/drkm-lib"))
(push (expand-file-name "drkm" drkm-lib-dir) load-path)
(setq drkm-conf:use-custom-flag nil)
(require 'drkm-config)
(drkm-conf:init drkm-lib-dir))

(require 'config-TMP)

(require 'top-config-misc)
(require 'top-config-various-dev)
(require 'top-config-pim)
(require 'top-config-text)
(require 'top-config-other-edit)
(require 'top-config-prog)
(require 'top-config-web)

(provide 'drkm-.emacs)

C'est a dire que je charge drkm-config (que je configure elle-meme
un peu), puis j'appelle drkm-conf:init (c'est la que par exemple le
load-path est parcouru a la recherche des Subdirs Files, etc.). Apres
quoi, je charge chaque aspect de ma config.

Le truc, c'est que la plupart ne contiennent principalement que des
appels a drkm-conf:configure. Dans top-config-prog.el, par exemple,
j'ai des appels comme :

(defalias 'perl-mode 'cperl-mode)
(drkm-conf:configure cperl-mode
:config 'config-perl)

(drkm-conf:configure sql-mode
:config 'config-sql)

(drkm-conf:configure c-mode
:config 'config-cc-mode
:auto-mode '(".[jklm]?h'" ".c'"
".y(acc)?'" ".lex'")
:autoloads '(("cc-styles"
. ((c-add-style
"Adds (or updates) a style to `c-style-alist'."
t)
(c-set-style
"Set the identation style of the buffer."
t)))))

(drkm-conf:configure c++-mode
:config 'config-cc-mode
:auto-mode '(".[ijklmt]?(cc|hh)'"
".[ch](pp|xx|++)'"
".itcc'"
".ticc'"
".(CC?|HH?)'"))

(drkm-conf:configure objc-mode
:config 'config-cc-mode
:auto-mode '(".m'"))

(drkm-conf:configure java-mode
:config 'config-cc-mode
:auto-mode '(".java'"))

(drkm-conf:configure idl-mode
:config 'config-cc-mode
:auto-mode '(".idl'"))

(drkm-conf:configure pike-mode
:config 'config-cc-mode
:auto-mode '(".(u?lpc|pike|pmod(.in)?)'")
:interpreters '("`pike'"))

(drkm-conf:configure awk-mode
:config 'config-cc-mode
:auto-mode '(".awk'")
:interpreters '("`[gmn]?awk'")
:autoloads '(("awk-mode" .
((awk-mode "Major mode for editing AWK." t)))))

Cela represente, hors commentaires, la moitie ou le tiers du
fichier. Ce qui reste raisonnable. A la premiere utilisation de
perl-mode ou cperl-mode, config-perl.el sera charge. De meme pour
sql-mode et config-sql.el. Ou c-mode, c++-mode, objc-mode, java-mode,
idl-mode, pike-mode et awk-mode pour config-cc-mode.el.

Au passage, j'ai quand meme specifie les valeurs necessaires pour
auto-mode-alist et interpreter-mode-alist, afin de pouvoir determiner
le bon mode a employer.

Mais je ne suis pas vraiment content pour l'instant de
drkm-conf:configure. Ni reellement de son interface, ni surtout de
son implementation. Mais je pense qu'il y a des concepts interessants
a developper (lorsque j'aurai plus de temps, c'est toujours la meme
rengaine :-p).

Je pense qu'il est temps que je clarifie ces points, et que je
documente clairement le tout. Un jour, peut-etre (on peut rever),
cela arrivera.

--drkm