Estoy implementando una aplicación Java que incluye una pila Deshacer / Rehacer. Me di cuenta de que algunas aplicaciones (como TextEdit en Mac OS X) le permiten elegir "Deshacer escritura" en el menú Editar después de escribir texto. También me gustaría implementar ese tipo de cosas en mi aplicación, pero me cuesta mucho encontrar pautas sobre cómo debería comportarse.
Con un poco de prueba y error, mi mejor conjetura sobre cómo se comporta el Deshacer escritura de TextEdit es:
- Cuando el usuario escriba un nuevo carácter (o escriba la clave de eliminación), combínelo en el elemento de Deshacer escritura anterior si hay uno en la parte superior de la pila Deshacer, a menos que ocurra una de las siguientes situaciones
- Siempre cree un nuevo elemento Deshacer escritura después de que el usuario continúe escribiendo después de al menos 15 segundos de inactividad
- Siempre cree un nuevo elemento Deshacer escritura después de que el usuario esté escribiendo durante un período prolongado de tiempo y se cumpla alguna condición (no se pudo determinar si esto se basó en el tiempo o en el recuento de caracteres).
- Siempre cree un nuevo elemento Deshacer escritura cuando se seleccione cualquier texto y luego se elimine o se sobrescriba (seleccionar texto, no realizar ningún cambio, luego regresar al punto de inserción original y continuar escribiendo no activa esto)
En la práctica, la estrategia de Apple parece funcionar (al menos funciona para mí cuando escribo), pero como se señaló en el último punto, realmente no he podido descifrar las reglas. Además, parece que otros programas siguen reglas diferentes, como Microsoft Word. Google no ha presentado una lista definida de reglas para ninguna implementación de Deshacer escritura y no he encontrado ninguna de las mejores prácticas sobre cómo debería comportarse. Entonces, ¿cómo debería comportarse? ¿O solo depende de los caprichos del programador?
EDITAR: Solo para aclarar, no estoy interesado en los detalles de implementación en este momento. Tengo especial curiosidad por saber si existe o no una referencia autorizada (por ejemplo, mejores prácticas o documento de interfaz de usuario) que describa esto o una descripción de cómo se implementa en múltiples productos.
124<delete>3
, deshacer y rehacer resulta en 123
. Supongo que la ventaja de esto es que da como resultado el estado final del texto del usuario, algo así como la sugerencia anterior.