This was an interesting bug. Let's first define a recipe to make it more apparent: C-x C-m C-\ french-postfix RET C-x ( pa^te'_a`_l'Unicode RET C-x ) C-x e This should insert "pâté_à_l'Unicode". It worked as expected with Emacs 21-24. After commit 30a6b1f814, which was the result of the discussion in http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00193.html , and before commit 03e3440dbb, it inserts "paâtteé__aà__l'UUnniiccocododee". This is what one gets in Emacs 25 and 26. This is not surprising, as the recipe in that discussion and quail.el both use unread-command-events, but expect an opposite effect. After commit 03e3440dbb, which was the result of bug#32108, it inserts "pâtté__à__l'Unnicocdode". This is what one gets in Emacs 27 (and 28 till now). I attach a patch to fix that bug. I checked that the recipes that led to the two above commits still work correctly, and that it does not introduce regressions with make check. Note that the inhibit--record-char variable, which was introduced by commit 03e3440dbb, is, after applying that patch, only used once, namely in lisp/term/xterm.el, as a result of bug#44908. It is not used in ELPA or MELPA. I'm not convinced that bug#44908 is a sufficient reason to keep that variable.