Subject: bug#63838: closed (Re: bug#63838: 28.2; 'wid-edit.el' problems with 'integer' (and 'sexp') widgets.)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 16 Sep 2023 09:59:02 +0000

Your bug report

#63838: 28.2; 'wid-edit.el' problems with 'integer' (and 'sexp') widgets.

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
63838: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=63838
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#63838: 28.2; 'wid-edit.el' problems with 'integer' (and 'sexp') widgets.
From: Eli Zaretskii <[email-masked]>
To: Mauro Aranda <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Sat, 16 Sep 2023 12:58:31 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> Cc: Marco Antoniotti <[email-masked]>
> Date: Sat, 9 Sep 2023 12:13:53 -0300
> From: Mauro Aranda <[email-masked]>
> 
> I attach a patch to handle an empty restricted sexp widget, together
> with a test.

Thanks, installed on the master branch, and closing the bug.

Subject: 28.2; 'wid-edit.el' problems with 'integer' (and 'sexp') widgets.
From: Marco Antoniotti <[email-masked]>
To: [email-masked]
Date: Fri, 2 Jun 2023 11:49:10 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi

The issue is with the following code that tries to use the Widget
library.  The slots of the widget are actually not necessary to see the
problem.

 (widget-create 'integer
                :help-echo "Enter an integer..."
                :notify (lambda (w1 &rest ws)
                           (ignore ws)
                           (message "WIFT: IF: %s"
                                    (widget-value w1)
                           ))
                :size 4
  )

If you set up a widget buffer, the field will appear as expected with a 0
as initial value.  The problem starts if you try to clear the field and
then enter a new value, say by hitting C-k, and the problem is in the
:value-to-external functions in the in sexp and restricted-sexp widgets
(the number, float and natnum widgets must also be fixed).

The library :value-to-external functions eventually do a (read value) where
value is the widget value; alas, value can be "" if you edit the field in a
pretty standard way, as, as I said above, if you had tried to kill the
field line (C-k); this causes the traditional minor demons to fly out of
the nose, as a 'End of file during parsing' error gets signaled.  After
that, the buffer with the widgets is pretty much in a random state.

Specializing the widget with a hack like the function below fixes the
problem, but a
good solution may need some more work to get all the corner cases.  Note
that setting a "widget buffer" in overwrite mode goes a long way to
mitigate these problems: maybe having widget-setup switch to it would be
another good thing to do.

  :value-to-external
  (lambda (widget value)
    ;; Lifted, and fixed, from `:value-to-external' in
    ;; `restricted-sexp'.

    (unless (stringp value)
      (display-warning
       'widget-bad-default-value
       (format-message
        "\nA widget of type %S has a bad default value.
value: %S
match function: %S
match-alternatives: %S"
        (widget-type widget)
        value
        (widget-get widget :match)
        (widget-get widget :match-alternatives))
       :warning))
    (if (and (stringp value) (string-equal "" value))
        ;; Oooops, we cannot just `read'.
        (widget-get widget :default-value)
      (read value))
    )

Note: this goes back, at least, to 25.x.

Thanks for the attention

Marco Antoniotti

In GNU Emacs 28.2 (build 2, x86_64-w64-mingw32)
 of 2022-09-13 built on AVALON
Windowing system distributor 'Microsoft Corp.', version 10.0.22621
System Description: Microsoft Windows 10 Pro (v10.0.2009.22621.1778)

Configured using:
 'configure --with-modules --without-dbus --with-native-compilation
 --without-compress-install CFLAGS=-O2'

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
XPM ZLIB

(NATIVE_COMP present but libgccjit not available)

Important settings:
  value of $LANG: ENG
  locale-coding-system: cp1252

Major mode: Fundamental

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-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
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  transient-mark-mode: t

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived gnus-util rmail rmail-loaddefs
text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils time-date wombat-theme finder-inf tex-site
epg rfc6068 epg-config gnu-elpa-keyring-update slime-autoloads rx 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 subr-x map url-vars seq byte-opt gv 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
dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars 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 hashtable-print-readable backquote threads w32notify
w32 lcms2 multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 246351 7879)
 (symbols 48 14548 1)
 (strings 32 84982 2407)
 (string-bytes 1 2218067)
 (vectors 16 24066)
 (vector-slots 8 414464 16368)
 (floats 8 28 222)
 (intervals 56 377 9)
 (buffers 992 12))

-- 
Marco Antoniotti
Somewhere over the Rainbow