aaaa ! bbbb @ cccc # 1. when cursor at position "#", call `undo', cursor jump to "@" 2. when cursor at position "@", call `undo-redo', text "cccc" restore, but cursor still remain in "@", don't move to "#". my workaround fow now: in function primitive-undo : change L3624 to : `(goto-char (+ pos (length string)))`