Existe-t-il des bibliothèques pour les champs de saisie dans Emacs?


10

De nombreux modes Emacs utilisent (quelque chose comme) des formulaires: l'interface de personnalisation en fait partie, le mode Message (lire: sa partie en-tête) en est une autre; il y en a plus, malheureusement pas toujours très similaires. Par "forme", j'entends ici un tampon avec des parties et des endroits en lecture seule désignés pour entrer du texte; il peut ou non contenir des boutons (il devrait probablement accepter C-c C-ccomme clé de confirmation / validation, indépendamment de la présence d'un bouton OK ).

Je suis particulièrement intéressé par la saisie semi-automatique dans les champs (et en particulier, l'activation des champs avec des listes de valeurs d'un ensemble désigné, disons séparées par des virgules). Ma question est la suivante: existe-t-il une bibliothèque Emacs permettant de créer facilement (par "facile", je ne veux pas réinventer la roue) de tels formulaires, ou dois-je tout coder moi-même?

(J'imagine que ce que je devrais faire dans ce dernier cas serait (1) mettre certaines parties du tampon en lecture seule, (2) préparer un mode majeur spécial, de sorte que par exemple TABet S-TABbasculer entre les "champs", et (3) peut-être utiliser quelque chose comme Icicles ou Helm pour la saisie semi-automatique.)


1
Changé votre titre pour dire les champs de saisie. Les formulaires ont une signification très spéciale dans elisp, ce qui pourrait prêter à confusion.
Malabarba

2
Et oui, il y a une bibliothèque de widgets intégrée. Mais je n'en sais rien.
Malabarba

@Malabarba: merci, c'est probablement une meilleure formulation.
mbork

(Même si Emacs lui-même utilise le mot "forme" dans ce sens - voir le manuel des widgets mentionné dans la réponse de Drew!)
mbork

Réponses:


8

Voir les bibliothèques cus-edit.elet wid-edit.el(et leurs bibliothèques de niveau supérieur custom.elet widget.el, et les bibliothèques de composants associées), qui sont incluses avec GNU Emacs. Le premier utilise le second. Ce dernier définit des trucs d'entrée de forme basiques (et pas si basiques), appelés " widgets ", dans une hiérarchie. Vous pouvez utiliser ces widgets et fonctions prédéfinis dans la bibliothèque pour créer vos propres widgets et types de widgets.

Cependant, sachez que le code de ces bibliothèques, en particulier celui de wid-edit.el, n'est pas très facile à suivre. Le mieux est de commencer par réutiliser les widgets existants ou d'utiliser le code de définition de widget existant comme guide.

(Deux bibliothèques d'extension mineures pour cela sont cus-edit+.elet wid-edit+.el. Elles présentent également quelques exemples d'utilisation.)

Il existe un manuel d'informations pour les widgets, distribué avec GNU Emacs, intitulé " The Emacs Widget Library ".

Il y a aussi une bibliothèque forms.el, incluse avec GNU Emacs, mais je ne la connais pas. Peut-être que quelqu'un d'autre a quelque chose d'utile à dire à ce sujet. Il existe un manuel pour les formulaires, distribué avec GNU Emacs, intitulé " Forms Mode ".


2
Un peu plus sur forms.el: stackoverflow.com/questions/10166600/…
phils

1
@Drew: merci pour votre réponse! Pourriez-vous clarifier la relation entre \(custom\|widget\).elet \(cus\|wid\)-edit.elun peu? Je trouve surtout cette partie des Widgets incompréhensible manuel: (require 'widget) (eval-when-compile (require 'wid-edit)).
mbork

1
Tout d'abord, je ne suis pas un expert en la matière. Les moments où je devais changer quelque chose par rapport à la personnalisation, j'ai plongé dans cus-edit.elet wid-edit.el. Les autres fichiers que vous mentionnez sont des fichiers de niveau supérieur; les *-edit.elfichiers ont le code qui m'intéressait. Je ne sais pas beaucoup plus que ça; Pardon. La vraie difficulté est le code lui-même, qui utilise un style semi-OOP particulier qui ne se prête pas bien à l'auto-documentation d'Emacs (pour le moins) ou au débogueur Emacs. Vous pouvez enquêter par vous-même, ou peut-être essayer de contacter l'auteur (bonne chance avec ça!). Peut-être que d'autres ici pourront vous aider.
Drew
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.