これまで KarteEditor の JTextPane に TextComponentUndoManager を付けて undo ができるようにしてあったが,機能的には入力を1段階戻すだけの単純なものであった。
そのため,例えばスタンプを DnD で移動した場合,【ドロップしたスタンプを書き込む】【位置や改行などの調節】【元のスタンプを削除する】という一連の操作が行われるので,これを undo すると,undo 1回毎に【元のスタンプが復活】【改行などの調節が戻る】【ドロップしたスタンプが消える】と戻っていくことになる。できれば DnD の操作はまとめて1回で undo したいところである。また,英単語を打つ場合【english word】と打った後に undo すると,【english wor】【english wo】【english w】と1文字ずつ戻ることになる。ここはできれば,単語毎にまとめて消えて欲しいところである。
そこで,まず TextComponentUndoManager に Timer を組み込んで,短時間 (30 msec 以内) に連続しておきた操作は,1つにまとめてから UndoManager に登録するようにした。これによって DnD は1回の undo で戻るようになり,ATOK の漢字変換後の入力も,変換して入力した分が1回の undo で戻るようになった。また,アルファベット入力の場合は, 前の入力をチェックして,アルファベットだった場合は前の undo 情報にマージするようにして,word 単位の undo ができるようにした。