Undo / Redoスタックを含むJavaアプリを実装しています。一部のアプリ(Mac OS XのTextEditなど)では、テキストを入力した後、[編集]メニューから[入力を元に戻す]を選択できます。私も自分のアプリにそのようなことを実装したいと思いますが、それがどのように振る舞うべきかについてのガイドラインを見つけるのに本当に苦労しています。
試行錯誤を繰り返して、TextEditのUndo Typingの動作についての私の推測は次のとおりです。
- ユーザーが新しい文字を入力する(または削除キーを入力する)ときに、次のいずれかの状況が発生しない限り、元の[元に戻す]項目が元に戻すスタックの最上位にある場合、それをマージします
- 少なくとも15秒間非アクティブな状態が続いた後にユーザーが入力を続けた後は、常に新しい[元に戻す]項目を作成します。
- ユーザーが長時間入力し、何らかの条件が満たされた後は、常に新しい[元に戻す]項目を作成します(これが時間ベースであるか文字数ベースであるかはわかりません)。
- テキストを選択してから削除または上書きする場合は、常に新しい[元に戻す]項目を作成します(テキストを選択し、変更を加えずに元の挿入ポイントに戻って入力し続けても、トリガーされません)
実際には、Appleの戦略は機能しているように見えます(少なくとも私がタイプするときは機能します)が、最後のポイントで述べたように、私は実際にルールを理解することができませんでした。また、他のプログラムはMicrosoft Wordなどの異なる規則に従っているようです。Googleは、Undo Typingの実装に関するルールの定義済みリストを公開しておらず、その動作方法に関するベストプラクティスに遭遇していません。それで、それはどのように振る舞うべきですか?それとも、プログラマーの気まぐれ次第ですか?
編集:明確にするために、今は実装の詳細には興味がありません。特に、これを説明する信頼できる参照(ベストプラクティスやユーザーインターフェイスドキュメントなど)が存在するかどうか、または複数の製品にまたがってどのように実装されているかの説明について興味があります。
124<delete>3
、それを元に戻し、やり直します123
。これの利点は、上記の提案のように、ユーザーのテキストの最終状態が得られることだと思います。