Я реализую приложение Java, которое включает в себя стек Undo / Redo. Я заметил, что некоторые приложения (такие как TextEdit в Mac OS X) позволяют вам выбрать «Отменить ввод» в меню «Правка» после ввода текста. Я бы тоже хотел внедрить подобные вещи в свое приложение, но мне очень трудно найти рекомендации по его поведению.
С некоторой пробой и ошибкой я лучше всего расскажу о том, как ведет себя Undo Typing в TextEdit:
- Когда пользователь вводит новый символ (или вводит ключ удаления), объедините его с предыдущим элементом отмены ввода, если он находится в верхней части стека отмены, если только не произойдет одна из следующих ситуаций
- Всегда создавайте новый элемент отмены набора текста после того, как пользователь продолжит печатать после не менее 15 секунд бездействия
- Всегда создавайте новый элемент отмены набора текста после того, как пользователь печатает в течение продолжительного периода времени и когда выполняется какое-то условие (не удалось выяснить, было ли это основано на времени или на основе количества символов).
- Всегда создавайте новый элемент «Отменить набор текста», когда любой текст выделен, а затем удален или перезаписан (выбор текста, без внесения изменений, затем возврат к исходной точке вставки и продолжение ввода не вызывает этого)
На практике стратегия Apple, кажется, работает (по крайней мере, она работает для меня, когда я печатаю), но, как было отмечено в последнем пункте, я действительно не смог выяснить правила. Кроме того, похоже, что другие программы следуют другим правилам, таким как Microsoft Word. Google не нашел определенного списка правил для какой-либо реализации Undo Typing, и я не сталкивался с рекомендациями относительно того, как он должен себя вести. Так как это должно вести себя? Или дело только в прихотях программиста?
РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я не заинтересован в деталях реализации прямо сейчас. Мне особенно любопытно, существует ли авторитетная ссылка (например, лучшие практики или документ интерфейса пользователя), описывающая это или описание того, как это реализовано в нескольких продуктах.
124<delete>3
, отмена и повторное выполнение этого приводит к 123
. Я предполагаю, что преимущество этого в том, что оно приводит к конечному состоянию текста пользователя, что-то вроде вышеупомянутого предложения.