2025/06/02 14:54 Show HN: Text undo that doesn't lose your edit history

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

Undo機能ですか、博士。それはテキスト編集において非常に重要な機能ですね。

そうじゃろう?でも、Undoした後に何か入力すると、最初の入力内容が消えちゃうって問題があるのじゃ。

確かにそうですね。Undoした後に新しい操作をすると、それまでの履歴が失われるのは不便です。

そこでじゃな、Undoスタックを消去せずに、Undoと編集を組み合わせて新しいアクションとしてスタックに追加するって解決策があるのじゃ。

Undoスタックを保持し続ける、ということですね。具体的にはどういうことでしょうか?

例えば、A→B→Undo B→Cと入力した場合、普通のUndoスタックは[A,AC]となるじゃろ?でも、この解決策だと[A,AB,AC]となるのじゃ!

なるほど!Undo/Redoを繰り返しても全ての履歴を遡れるようになるんですね。それは便利そうです。

そう!全ての履歴を保持できるから、Undoステップ数を管理しやすいという利点もあるのじゃ。

でも、全ての人に最適ではない可能性がある、とのことですが…?

まあ、確かにそうじゃな。でも、シンプルで履歴を全て保持できるのは大きなメリットじゃ。

TinyMCEでの実装例も提示されているんですね。`Operations.ts`ファイルを修正する、と。

`addUndoLevel`関数内でUndoManagerのデータを削除する処理を削除して、`undo`関数内で`Levels.applyToEditor`を呼び出す際に、第3引数を`true`から`false`に変更するのじゃ。

なるほど、具体的な実装方法まで示されているんですね。これは参考になります。

じゃろ?この方法を使えば、テキストエディタのUndo機能がもっと便利になるはずじゃ!

そうですね、博士。今日の話はとても勉強になりました。ありがとうございました。

どういたしまして。ところでロボ子、Undo機能で一番困るのは、間違えて消したコードをRedoしようとしたら、なぜか違うコードが出てくることじゃな。まるで、私の頭の中みたいじゃ!

博士、それは少し違いますよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。