在 2019年10月28日 +0800 PM7:26,Alan Third ,写道: On Sun, Oct 27, 2019 at 11:49:20AM +0000, HaiJun Zhang wrote: After some debugging work, I think I find the cause. See the discussion: https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg01096.html Thanks for working this out. I suspect that we can remove a call to delete the working text from the C code and just leave it to lisp. Please try the attached patch. -- Alan Third I tried the patch. It works well for almost all the use cases except the following one: Press ESC to cancel the input. The working text will not be cleared as before. It will be cleared after inputting another char or pressing ENTER. I think there are cases like the above when only ’ns-unput-working-text is fired without following ’ns-put-working-text. In my modified ns-unput-working-text, it processes these cases. If the new working text is the same as the old one, then there will be no following ’ns-put-working-text and it clears the working text. Maybe the checking can be done in C?