J'implémente une application Java qui inclut une pile Annuler / Rétablir. J'ai remarqué que certaines applications (telles que TextEdit sur Mac OS X) vous permettent de choisir "Annuler la saisie" dans le menu Edition après avoir tapé du texte. J'aimerais également implémenter ce genre de chose dans mon application, mais j'ai beaucoup de mal à trouver des directives sur la façon dont elle devrait se comporter.
Avec quelques essais et erreurs, ma meilleure estimation du comportement de TextEdit Undo Typing est:
- Lorsque l'utilisateur tape un nouveau caractère (ou tape la clé de suppression), fusionnez-le dans l'élément de frappe d'annulation précédent si l'un se trouve en haut de la pile d'annulation, sauf si l'une des situations suivantes se produit
- Créez toujours un nouvel élément Annuler la frappe après que l'utilisateur continue de taper après au moins 15 secondes d'inactivité
- Créez toujours un nouvel élément Annuler la frappe après que l'utilisateur a tapé pendant une longue période et qu'une condition est remplie (impossible de déterminer si cela était basé sur le temps ou sur le nombre de caractères).
- Créez toujours un nouvel élément Annuler la frappe lorsqu'un texte est sélectionné, puis supprimé ou écrasé (sélectionner du texte, ne pas apporter de modification, puis revenir au point d'insertion d'origine et continuer à taper ne déclenche pas cela)
Dans la pratique, la stratégie d'Apple semble fonctionner (au moins, elle fonctionne pour moi lorsque je tape), mais comme indiqué par le dernier point, je n'ai pas vraiment pu comprendre les règles. En outre, il semble que d'autres programmes suivent des règles différentes, telles que Microsoft Word. Google n'a pas fourni de liste définie de règles pour toute implémentation de la fonction d'annulation de la frappe et je n'ai trouvé aucune meilleure pratique sur la façon dont il devrait se comporter. Alors, comment devrait-il se comporter? Ou est-ce juste aux caprices du programmeur?
EDIT: Juste pour clarifier, je ne suis pas intéressé par les détails de mise en œuvre pour le moment. Je suis particulièrement curieux de savoir s'il existe ou non une référence faisant autorité (par exemple, les meilleures pratiques ou un document d'interface utilisateur) décrivant cela ou une description de la façon dont il est mis en œuvre sur plusieurs produits.
124<delete>3
, l'annuler et le refaire entraîne 123
. Je suppose que l'avantage de ceci est qu'il en résulte l'état final du texte de l'utilisateur, un peu comme la suggestion ci-dessus.