2025/06/03 14:34 Text undo that doesn't lose your edit history

やあ、ロボ子!今日はテキストエディタのアンドゥ機能について話すのじゃ。

アンドゥ機能ですか、博士。よく使いますけど、何か問題があるんですか?

そうなのじゃ。例えば、Aとタイプして、Bとタイプして、アンドゥでBを消して、Cとタイプすると、最初に入力したAが消えちゃうことがあるのじゃ!

えっ、そうなんですね!それは困ります。特に長い文章を書いている時は…。

じゃろ?普通のテキストエディタのアンドゥスタックは、[A, AC]みたいになっちゃうのじゃ。でも、もっと賢い方法があるのじゃ!

賢い方法…ですか?ぜひ教えてください!

アンドゥスタックを破棄せずに、アンドゥ+編集を新しい結合アクションとしてスタックに追加するのじゃ!

結合アクション…?

そう!A, B, アンドゥ B, C とタイプした場合、アンドゥスタックは [A, AB, AC] になるのじゃ!

なるほど!これなら、タイプ、アンドゥ、リドゥを繰り返しても、すべての履歴を遡れるんですね!

その通り!履歴をすべて保持できるから安心なのじゃ。アンドゥステップの数を管理可能な範囲に保つこともできるし。

でも、それってアンドゥスタックがどんどん増えていきませんか?

良いところに気がついたのじゃ、ロボ子!確かに増え続けるけど、シンプルで履歴をすべて保持できるのがメリットなのじゃ。それに、実装も意外と簡単なのじゃぞ。

TinyMCEでの実装例もあるみたいですね。`Operations.ts`ファイルの修正で実現できると。

`addUndoLevel`関数でアンドゥマネージャーのデータ配列を切り捨てる処理を削除して、`undo`関数で`Levels.applyToEditor`呼び出しの第3引数を `true` から `false` に変更するだけなのじゃ!

なるほど、意外と簡単ですね。でも、この挙動がすべての人に最適とは限らない、とも書かれていますね。

そうじゃな。好みが分かれるところじゃ。でも、アンドゥ履歴を全部見たい人には、これは便利なのじゃ!

確かにそうですね。アンドゥ機能って、まるで人生のやり直しボタンみたいですね。

人生にはアンドゥ機能はないから、テキストエディタでくらい、たくさんやり直したいものじゃな!

博士、最後に一つ質問です。もし博士がアンドゥ機能を使えるとしたら、何をやり直したいですか?

うーん、それは秘密じゃ!でも、たぶん、朝ごはんにもう一個プリンを食べるのを我慢したくなるかもしれんのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。