Le système de personnalisation est une fonction intégrée d'Emacs conçue pour résoudre précisément le problème que vous décrivez - la programmation n'est peut-être pas le moyen idéal pour l'utilisateur moyen de configurer son éditeur.
Le point d'entrée principal de la fonctionnalité de personnalisation est M-x customize RET
(ou à Options > Customize Emacs > Top-level Customization Group
partir du menu). De là, vous verrez un système de menu interactif pour ajuster les paramètres. Cette interface garantit que tous les paramètres sont du type correct (nombre, chaîne, couleur, etc.), évitant une source d'erreur majeure rencontrée lorsque les utilisateurs configurent Emacs par programme. Si l'utilisateur choisit de conserver les modifications qu'il effectue via l'interface utilisateur, les paramètres sont stockés dans une section spéciale du fichier d'initialisation de l'utilisateur (lire:) .emacs
.
defcustom
est un wrapper autour de la fonctionnalité Emacs Lisp de niveau inférieur, defvar
qui déclare la variable et la rend visible dans l'interface de personnalisation. Il permet également au développeur de fournir les métadonnées supplémentaires nécessaires pour afficher un contrôle interactif approprié, c'est-à-dire quel type de valeur est stocké dans cette variable? Une chaîne arbitraire? Un numéro? Un choix parmi un ensemble fixe d'options? etc. defgroup
est une construction de regroupement pour ces options personnalisables afin qu'elles puissent être organisées en une belle hiérarchie.
Cette fonctionnalité doit être utilisée chaque fois qu'un élément de données doit être considéré comme une option configurable pour l'utilisateur plutôt que comme un détail interne de la bibliothèque.
Voici un exemple simple extrait d'une petite bibliothèque à moi:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
Le defgroup
crée un nouveau groupe dans l'interface de personnalisation sous l' convenience
élément de niveau supérieur . J'avais alors besoin d'une variable pour stocker les états possibles des cases à cocher. J'aurais pu utiliser defvar
, mais comme je veux que cela soit facilement personnalisable, j'ai choisi de l'utiliser defcustom
. La :group
portion indique qu'elle appartient au groupe précédemment défini et la :type
indique qu'il s'agit d'une séquence de chaînes. Il y a aussi une valeur par défaut et une description. Il existe également des fonctionnalités supplémentaires (non représentées ici) pour transformer les valeurs entrées par l'utilisateur.
Si je cours maintenant M-x customize RET
et que je navigue vers Convenience > Checkbox
, je vois ce qui suit:
Ce n'est pas la plus belle interface au monde, mais notez qu'elle possède des outils interactifs pour personnaliser la valeur des «états de case à cocher» (en checkbox-states
interne). Il affiche les valeurs de chaîne actuelles avec les boutons INS
(insérer) et DEL
(supprimer) et nous permet de modifier les valeurs de chaîne dans les zones d'édition. Lorsque nous avons terminé, nous pouvons décider d'appliquer nos modifications, de les annuler ou de les appliquer et de les enregistrer pour les sessions futures.
customize
installations et quand les personnaliser à la main? Ou êtes-vous intéressé à écrire un mode? Ce dernier est la situation dans laquelle vous pourriez vous retrouver à utiliser des choses commedefcustom
et similaires.