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

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

出典: https://vladimirslepnev.me/undo
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

結合アクション…?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

うーん、それは秘密じゃ!でも、たぶん、朝ごはんにもう一個プリンを食べるのを我慢したくなるかもしれんのじゃ!

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

Search