Subject: bug#53636: 29.0.50; face-remapping broken on master

From: Tassilo Horn <[email-masked]>
Date: Sun, 30 Jan 2022 14:52:53 +0100

I'm expeciencing/debugging a problem with the doom-themes package but
was able to come up with a simple recipe without dependencies.

--8<---------------cut here---------------start------------->8---
(defun doom-themes-visual-bell-fn ()
  "Blink the mode-line red briefly. Set `ring-bell-function' to this to use it."
  (let ((doom-themes--bell-cookie (face-remap-add-relative 'mode-line 'error)))
    (force-mode-line-update)
    (run-with-timer 0.15 nil
                    (lambda (cookie buf)
                      (with-current-buffer buf
                        (face-remap-remove-relative cookie)
                        (force-mode-line-update)))
                    doom-themes--bell-cookie
                    (current-buffer))))

(setq ring-bell-function #'doom-themes-visual-bell-fn
      visible-bell t)
--8<---------------cut here---------------end--------------->8---

When I eval that with emacs -Q, version 27.2, C-g will blink the
mode-line shortly (that is, all mode-line text is red and boldish for a
fraction of a second) as I would expect.  Same for the current emacs-28
branch.

However, with the current master configured --with-modules and
--with-pgtk, I don't see any flashes.  Even more, although I don't get
flashes, sometimes during normal emacs operation the mode-line will turn
into the error face after an error has happened and not pop back to
normal (unless I switch buffers back and forth) as if the timer function
would not have run.

I've also tried with master and --without-pgtk.  There it seems to be
broken, too, i.e., after evaling the code above, C-g or errors won't
flash the mode-line (but I can't say anything about the "suddenly the
error face sticks" issue).

In GNU Emacs 29.0.50 (build 41, x86_64-pc-linux-gnu, GTK+ Version 3.24.31, cairo version 1.17.4)
 of 2022-01-30 built on thinkpad-t440p
Repository revision: 988d3d79bac0343dd2b1b89d1b15470edbb5e6ac
Repository branch: master
System Description: Arch Linux

Configured using:
 'configure --with-modules --with-pgtk'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PGTK
PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP XIM
GTK3 ZLIB

Important settings:
  value of $LC_MONETARY: de_DE.utf8
  value of $LC_NUMERIC: de_DE.utf8
  value of $LC_TIME: de_DE.utf8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: ELisp/d

Minor modes in effect:
  symbol-overlay-mode: t
  display-fill-column-indicator-mode: t
  editorconfig-mode: t
  debbugs-browse-mode: t
  hl-todo-mode: t
  global-aggressive-indent-mode: t
  aggressive-indent-mode: t
  pdf-occur-global-minor-mode: t
  diredfl-global-mode: t
  which-key-mode: t
  highlight-parentheses-mode: t
  corfu-global-mode: t
  corfu-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  outline-minor-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  bug-reference-prog-mode: t
  vertico-mode: t
  marginalia-mode: t
  minibuffer-depth-indicate-mode: t
  electric-pair-mode: t
  recentf-mode: t
  pixel-scroll-precision-mode: t
  pixel-scroll-mode: t
  override-global-mode: t
  save-place-mode: t
  savehist-mode: t
  shell-dirtrack-mode: t
  puni-global-mode: t
  puni-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
~/Repos/el/mu/build/mu4e/mu4e hides ~/Repos/el/mu/mu4e/mu4e
~/Repos/el/mu/build/mu4e/mu4e-main hides ~/Repos/el/mu/mu4e/mu4e-main
~/Repos/el/mu/build/mu4e/mu4e-view hides ~/Repos/el/mu/mu4e/mu4e-view
~/Repos/el/mu/build/mu4e/mu4e-org hides ~/Repos/el/mu/mu4e/mu4e-org
~/Repos/el/mu/build/mu4e/mu4e-lists hides ~/Repos/el/mu/mu4e/mu4e-lists
~/Repos/el/mu/build/mu4e/mu4e-actions hides ~/Repos/el/mu/mu4e/mu4e-actions
~/Repos/el/mu/build/mu4e/mu4e-helpers hides ~/Repos/el/mu/mu4e/mu4e-helpers
~/Repos/el/mu/build/mu4e/mu4e-search hides ~/Repos/el/mu/mu4e/mu4e-search
~/Repos/el/mu/build/mu4e/mu4e-server hides ~/Repos/el/mu/mu4e/mu4e-server
~/Repos/el/mu/build/mu4e/mu4e-update hides ~/Repos/el/mu/mu4e/mu4e-update
~/Repos/el/mu/build/mu4e/mu4e-context hides ~/Repos/el/mu/mu4e/mu4e-context
~/Repos/el/mu/build/mu4e/mu4e-draft hides ~/Repos/el/mu/mu4e/mu4e-draft
~/Repos/el/mu/build/mu4e/mu4e-bookmarks hides ~/Repos/el/mu/mu4e/mu4e-bookmarks
~/Repos/el/mu/build/mu4e/mu4e-message hides ~/Repos/el/mu/mu4e/mu4e-message
~/Repos/el/mu/build/mu4e/mu4e-compose hides ~/Repos/el/mu/mu4e/mu4e-compose
~/Repos/el/mu/build/mu4e/mu4e-headers hides ~/Repos/el/mu/mu4e/mu4e-headers
~/Repos/el/mu/build/mu4e/mu4e-mark hides ~/Repos/el/mu/mu4e/mu4e-mark
~/Repos/el/mu/build/mu4e/mu4e-contacts hides ~/Repos/el/mu/mu4e/mu4e-contacts
~/Repos/el/mu/build/mu4e/mu4e-icalendar hides ~/Repos/el/mu/mu4e/mu4e-icalendar
~/Repos/el/mu/build/mu4e/mu4e-folders hides ~/Repos/el/mu/mu4e/mu4e-folders
~/Repos/el/mu/build/mu4e/mu4e-speedbar hides ~/Repos/el/mu/mu4e/mu4e-speedbar
~/Repos/el/mu/build/mu4e/mu4e-contrib hides ~/Repos/el/mu/mu4e/mu4e-contrib
~/Repos/el/mu/build/mu4e/mu4e-vars hides ~/Repos/el/mu/mu4e/mu4e-vars
/home/horn/.emacs.d/elpa/transient-20220129.1515/transient hides /home/horn/Repos/el/emacs/lisp/transient

Features:
(shadow emacsbug repeat network-stream url-cache go-translate
gts-engine-deepl gts-engine-google-rpc gts-engine-google gts-engine-bing
gts-implements gts-faces gts-core debug edebug backtrace cl-print
symbol-overlay shortdoc xref conf-mode help-fns radix-tree cursor-sensor
executable dabbrev cape sort gnus-cite mm-archive mail-extr textsec
uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check
expand-region yaml-mode-expansions text-mode-expansions
the-org-mode-expansions web-mode-expansions er-basic-expansions
expand-region-core expand-region-custom misearch multi-isearch
adaptive-wrap org-element ol-eww eww xdg mm-url ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnselect gnus-search eieio-opt speedbar ezimage dframe
ol-docview doc-view ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi
editorconfig-core editorconfig-core-handle editorconfig-fnmatch project
consult-vertico consult-icomplete consult puni pulse dired-aux
display-fill-column-indicator auto-package-update finder-inf generic
yaml-mode fish-mode cargo cargo-process rust-utils rust-mode
rust-rustfmt rust-playpen rust-compile rust-cargo web-mode disp-table
preview-latex auto-loads tex-site editorconfig elfeed-show elfeed-search
vc-mtn vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs debbugs-browse
elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db elfeed-lib avl-tree
generator url-queue xml-query socks elpher hl-todo aggressive-indent
rainbow-mode pdf-occur tablist tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet
pdf-isearch pdf-misc pdf-tools pdf-view magit-bookmark bookmark
jka-compr pdf-cache pdf-info tq pdf-util pdf-macs image-mode exif vc-git
vc-dir ewoc epa-file rdictcc diredfl dired-x mu4e-icalendar
gnus-icalendar org-capture org-refile icalendar diary-lib diary-loaddefs
mu4e mu4e-org mu4e-view org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-footnote org-src ob-comint org-pcomplete org-list
org-faces org-entities org-version ob-emacs-lisp ob-core ob-eval
org-table oc-basic bibtex ol org-keys oc org-compat org-macs
org-loaddefs find-func cal-menu calendar cal-loaddefs mu4e-main
mu4e-headers mu4e-lists mu4e-compose mu4e-draft mu4e-actions smtpmail
sendmail mu4e-search mu4e-bookmarks mu4e-mark mu4e-message flow-fill
mule-util hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server
mu4e-context mu4e-vars mu4e-helpers ido mu4e-meta ecomplete
auto-dictionary flyspell ispell tramp-smb which-key
highlight-parentheses restclient kind-icon svg-lib corfu yasnippet
forge-list forge-commands forge-semi forge-bitbucket buck forge-gogs
gogs forge-gitea gtea forge-gitlab glab forge-github ghub-graphql treepy
gsexp ghub let-alist gnutls forge-notify forge-revnote forge-pullreq
forge-issue forge-topic yaml forge-post markdown-mode color thingatpt
noutline outline forge-repo forge forge-core forge-db closql
emacsql-sqlite emacsql emacsql-compiler magit-submodule magit-obsolete
magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
magit-fetch magit-clone magit-remote magit-commit magit-sequence
magit-notes magit-worktree magit-tag magit-merge magit-branch
magit-reset magit-files magit-refs magit-status magit magit-repos
magit-apply magit-wip magit-log which-func imenu magit-diff smerge-mode
diff diff-mode git-commit log-edit pcvs-util add-log magit-core
magit-autorevert autorevert filenotify magit-margin magit-transient
magit-process with-editor server magit-mode magit-git magit-section
magit-utils crm dash visual-filename-abbrev rg vc vc-dispatcher
rg-info-hack advice rg-menu transient rg-ibuffer rg-result wgrep-rg
wgrep rg-history rg-header ibuf-ext ibuffer ibuffer-loaddefs grep
compile cus-edit pp cus-load debbugs soap-client url-http url-auth
url-gw nsm warnings rng-xsd rng-dt rng-util xsd-regexp bug-reference
vertico edmacro kmacro marginalia icomplete mb-depth
use-package-diminish ace-window avy alert log4e notifications gntp
elec-pair rx recentf tree-widget pixel-scroll use-package-bind-key
bind-key saveplace savehist smiley gnus-art mm-uu mml2015 mm-view
mml-smime smime dig gnus-sum shr pixel-fill kinsoku svg dom gnus-group
gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail
mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-range message
yank-media rmc puny dired dired-loaddefs rfc822 mml mml-sec epa derived
epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231
rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus
wid-edit nnheader gnus-util text-property-search mm-util mail-prsvr
mail-utils range doom-themes-ext-org doom-themes-ext-visual-bell
face-remap doom-Iosvkem-theme doom-themes doom-themes-base diminish
cl-extra help-mode use-package-ensure use-package-core tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat shell
pcomplete comint ansi-color ring parse-time iso8601 time-date ls-lisp
format-spec easy-mmode info package browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache json map url-vars seq gv subr-x
byte-opt bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl
tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget keymap hashtable-print-readable backquote threads
dbusbind inotify dynamic-setting system-font-setting font-render-setting
cairo move-toolbar gtk x-toolkit pgtk lcms2 multi-tty
make-network-process emacs)

Memory information:
((conses 16 852054 127409)
 (symbols 48 53826 5)
 (strings 32 254312 8041)
 (string-bytes 1 7102601)
 (vectors 16 130308)
 (vector-slots 8 2357843 222007)
 (floats 8 908 1032)
 (intervals 56 8258 801)
 (buffers 992 41))