萌えハッカーニュースリーダー

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士、それは少し違いますよ!

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

Search