Subject: bug#31205: 26.1; Some text commands don't work properly in customize buffers

From: Michał Kondraciuk <[email-masked]>
Date: Sun, 15 Apr 2018 18:58:32 +0200

1. emacs -Q
2. M-x customize-face RET default RET
3. Navigate to first character in input field for 'Font Family'
4. M-u
5. The first word in 'Font Family' is not upcased. Point is now at line 
with "State" button. The line with "State" button says:

State : EDITED, shown value does not take effect until you seT OR Save it.

Attached patch fixes this behavior for me.

In GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.28)
  of 2018-04-14 built on localhost
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description:	Linux Mint 18.2 Sonya

Recent messages:
or a regular expression.
Search for custom items.
You can enter one or more words separated by spaces,
or a regular expression.
Show a menu with reset operations.
Apply settings (for the current session only).
Hide or show this face.
Change the state of this item.
Control whether this attribute has any effect.
Font family or fontset alias name.

Configured using:
  'configure

CONFIG_SHELL=/gnu/store/mm0zclrzj3y7rj74hzyd0f224xly04fh-bash-minimal-4.4.12/bin/bash

SHELL=/gnu/store/mm0zclrzj3y7rj74hzyd0f224xly04fh-bash-minimal-4.4.12/bin/bash
  --prefix=/gnu/store/1i85dhpvkd2bavijh5ggk4hhmvgkmshz-my-emacs-26.1
  --enable-fast-install'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND DBUS GSETTINGS NOTIFY ACL
GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS
GTK3 X11 THREADS

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

Major mode: Custom

Minor modes in effect:
   tooltip-mode: t
   global-eldoc-mode: t
   electric-indent-mode: t
   mouse-wheel-mode: t
   tool-bar-mode: t
   menu-bar-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
   line-number-mode: t
   transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv
bytecomp byte-compile cconv dired dired-loaddefs format-spec rfc822 mml
mml-sec password-cache epa derived epg epg-config gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils crm thingatpt cus-edit easymenu cus-start
cus-load wid-edit cl-loaddefs cl-lib elec-pair time-date mule-util
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame 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 charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote dbusbind inotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 118710 7449)
  (symbols 48 21858 2)
  (miscs 40 411 375)
  (strings 32 32024 1115)
  (string-bytes 1 840526)
  (vectors 16 14956)
  (vector-slots 8 501000 10250)
  (floats 8 56 61)
  (intervals 56 357 8)
  (buffers 992 13))
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index a12897e..55b2852 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -2221,7 +2221,7 @@ custom-notify
     (unless (eq state 'modified)
       (unless (memq state '(nil unknown hidden))
 	(widget-put widget :custom-state 'modified))
-      (custom-magic-reset widget)
+      (run-with-idle-timer 0.0 nil #'custom-magic-reset widget)
       (apply 'widget-default-notify widget args))))
 
 (defun custom-redraw (widget)