From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Marco Antoniotti Newsgroups: gmane.emacs.bugs Subject: bug#63838: 28.2; 'wid-edit.el' problems with 'integer' (and 'sexp') widgets. Date: Fri, 2 Jun 2023 11:49:10 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="000000000000ab80ba05fd227794" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="4651"; mail-complaints-to="usenet@ciao.gmane.io" To: 63838@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Jun 02 13:13:22 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q52if-00015l-Pf for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 02 Jun 2023 13:13:21 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q52iP-0005dS-5l; Fri, 02 Jun 2023 07:13:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q52iM-0005cj-M6 for bug-gnu-emacs@gnu.org; Fri, 02 Jun 2023 07:13:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q52iM-0007ZZ-BR for bug-gnu-emacs@gnu.org; Fri, 02 Jun 2023 07:13:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q52iL-0006W7-Py for bug-gnu-emacs@gnu.org; Fri, 02 Jun 2023 07:13:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Marco Antoniotti Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 02 Jun 2023 11:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 63838 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.168570437625038 (code B ref -1); Fri, 02 Jun 2023 11:13:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 2 Jun 2023 11:12:56 +0000 Original-Received: from localhost ([127.0.0.1]:39155 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q52iE-0006Vl-RH for submit@debbugs.gnu.org; Fri, 02 Jun 2023 07:12:55 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:57950) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q51Pa-0004AF-Ey for submit@debbugs.gnu.org; Fri, 02 Jun 2023 05:49:35 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q51PV-0006eY-Nu for bug-gnu-emacs@gnu.org; Fri, 02 Jun 2023 05:49:30 -0400 Original-Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q51PQ-0003cV-Gh for bug-gnu-emacs@gnu.org; Fri, 02 Jun 2023 05:49:29 -0400 Original-Received: by mail-yb1-xb2b.google.com with SMTP id 3f1490d57ef6-bacf5b89da7so1996842276.2 for ; Fri, 02 Jun 2023 02:49:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685699362; x=1688291362; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=jTLfnyfbSv5JFAltc2uxAb8Kj4ejK1tfOrXXFUP+MHE=; b=kWqhzqxjm1aZuhaSyazYXTxZvt+cFAcoeJGUL/INGE7SHmV3xTSULcqWsZ0GQzzYEu sYvu6ahlH7HAKP9ORggcLFrHjvCGbEWxa2bz949uTL3rzs65Z+5XQlR+wCBhR8Ckc8T2 T+Qs1F64k7MD6Fy/9c/eAgDS6ioroFW+DQPv/TDTbQeayi+gUTotwSeVvFa9k4jVinnT DaVWPjDftkxY4+QWQdGHnXZEXhgej1qUQpKSgepIGE/0Gut93gn+tBhHrIXCK8Z9ZD++ Jk3YHdYPLCMrDb1nkAnlyrIl604MI1mG5P5barsMR76Lj+GfsCKEqDLP4flR6sUaCb66 616Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685699362; x=1688291362; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=jTLfnyfbSv5JFAltc2uxAb8Kj4ejK1tfOrXXFUP+MHE=; b=EZlf3RByYIGkinhSxv2hSvnzdCtGabJKu5ZsxLNkmtxZ7Ru5Ats9EkoHEAK5KYEBTW ULdX7uJl5QonTnDVduE530ykE7gqIthQ+BtYJVCmyggdoUpwoc0LU5342LdKiR5apcVZ NJaTzmIZvg5xJCHWZnLnhoOFupU0nYukCWJe1nbyyQB3bWz+Y2dkPyz+ZEsDMsGzsH1Y UZOCXU+3zxPaUe3r1XIlT8c5t1Qz8GUb6oZQl5Qy3D9RFbMA6t1AILn7M+k+MQE+xArs dWA6x7odYxAkg943LzfGL21Ydj9lL5uRLBD/ka9k9ALOtuAZvQnSzuwtpxu9LjZDADKy OsCQ== X-Gm-Message-State: AC+VfDxlYbi6BX48xjhMA+BMG1g4EvoDLfTdpDEqgNrWkolqL0NHIDKm utZGN9pL9A+tcGUyctWD3qBmsaK5H7/2Xka4lo0bXLuivf7XXQ== X-Google-Smtp-Source: ACHHUZ5gFj3LhztaPvxhwPlkuzUROJXYD/p/m9GELJePL7gb0cJo2SPFidZ5vEPem9kOirrqNKlgIxcog+StPUvaCWw= X-Received: by 2002:a25:a2c1:0:b0:ba8:89bf:b3e5 with SMTP id c1-20020a25a2c1000000b00ba889bfb3e5mr2376868ybn.10.1685699361995; Fri, 02 Jun 2023 02:49:21 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::b2b; envelope-from=marcoxa@gmail.com; helo=mail-yb1-xb2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 02 Jun 2023 07:12:53 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:262750 Archived-At: --000000000000ab80ba05fd227794 Content-Type: text/plain; charset="UTF-8" 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 --000000000000ab80ba05fd227794 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

The issue is with the following code that tries = to use the Widget
library.=C2=A0 The slots of the widget are actually no= t necessary to see the problem.

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


If you set u= p a widget buffer, the field will appear as expected with a 0 as initial va= lue.=C2=A0 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-t= o-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 edi= t 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.=C2=A0 After that, the= buffer with the widgets is pretty much in a random state.
Specializing the widget with a hack like the function below fi= xes the problem, but a
good solution may need some more work to g= et all the corner cases.=C2=A0 Note that setting a "widget buffer"= ; in overwrite mode goes a long way to mitigate these problems: maybe havin= g widget-setup switch to it wo= uld be another good thing to do.

=C2=A0 :value-to-external
=C2=A0 (lambda (widget va= lue)
=C2=A0=C2=A0=C2=A0 ;; Lifted, and fixed, from `:value-to-external&#= 39; in
=C2=A0=C2=A0=C2=A0 ;; `restricted-sexp'.

=C2=A0=C2=A0= =C2=A0 (unless (stringp value)
=C2=A0 =C2=A0=C2=A0=C2=A0 (display-warnin= g
=C2=A0 =C2=A0 =C2=A0=C2=A0 'widget-bad-default-value
=C2=A0 =C2= =A0 =C2=A0=C2=A0 (format-message
=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 "= \nA widget of type %S has a bad default value.
value: %S
match functi= on: %S
match-alternatives: %S"
=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 = (widget-type widget)
=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 value
=C2=A0 = =C2=A0 =C2=A0=C2=A0=C2=A0 (widget-get widget :match)
=C2=A0 =C2=A0 =C2= =A0=C2=A0=C2=A0 (widget-get widget :match-alternatives))
=C2=A0 =C2=A0 = =C2=A0=C2=A0 :warning))
=C2=A0=C2=A0=C2=A0 (if (and (stringp value) (str= ing-equal "" value))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Oooops, we= cannot just `read'.
=C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 (widget-get wi= dget :default-value)
=C2=A0 =C2=A0=C2=A0=C2=A0 (read value))
=C2=A0= =C2=A0=C2=A0 )

Note: this goes back, at lea= st, to 25.x.

Thanks for the attention
Marco Antoniotti



<= /div>


In GNU Emacs 28.2 (build 2, x86_64-w64-mingw32)
=C2=A0of 2022-09-13 b= uilt on AVALON
Windowing system distributor 'Microsoft Corp.', v= ersion 10.0.22621
System Description: Microsoft Windows 10 Pro (v10.0.20= 09.22621.1778)

Configured using:
=C2=A0'configure --with-modu= les --without-dbus --with-native-compilation
=C2=A0--without-compress-in= stall CFLAGS=3D-O2'

Configured features:
ACL GIF GMP GNUTLS H= ARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDU= MPER PNG RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
XPM ZLIB

(NA= TIVE_COMP present but libgccjit not available)

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

= Major mode: Fundamental

Minor modes in effect:
=C2=A0 tooltip-mod= e: t
=C2=A0 global-eldoc-mode: t
=C2=A0 show-paren-mode: t
=C2=A0 = electric-indent-mode: t
=C2=A0 mouse-wheel-mode: t
=C2=A0 tool-bar-mo= de: t
=C2=A0 menu-bar-mode: t
=C2=A0 file-name-shadow-mode: t
=C2= =A0 global-font-lock-mode: t
=C2=A0 blink-cursor-mode: t
=C2=A0 auto-= composition-mode: t
=C2=A0 auto-encryption-mode: t
=C2=A0 auto-compre= ssion-mode: t
=C2=A0 buffer-read-only: t
=C2=A0 line-number-mode: t=C2=A0 transient-mark-mode: t

Features:
(shadow sort mail-extr = emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa de= rived gnus-util rmail rmail-loaddefs
text-property-search mm-decode mm-b= odies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendm= ail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils time-date w= ombat-theme finder-inf tex-site
epg rfc6068 epg-config gnu-elpa-keyring-= update slime-autoloads rx info
package browse-url url url-proxy url-priv= acy url-expand url-methods
url-history url-cookie url-domsuf url-util ma= ilcap 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 m= wheel
dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars term/comm= on-win
tool-bar dnd fontset image regexp-opt fringe tabulated-list repla= ce
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-b= ar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lockfont-lock syntax font-core term/tty-colors frame minibuffer cl-genericcham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet laokorean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
eur= opean ethiopic indian cyrillic chinese composite emoji-zwj charscript
ch= arprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-p= reloaded nadvice button loaddefs faces cus-face macroexp files
window te= xt-properties overlay sha1 md5 base64 format env code-pages
mule custom = widget hashtable-print-readable backquote threads w32notify
w32 lcms2 mu= lti-tty make-network-process native-compile emacs)

Memory informatio= n:
((conses 16 246351 7879)
=C2=A0(symbols 48 14548 1)
=C2=A0(stri= ngs 32 84982 2407)
=C2=A0(string-bytes 1 2218067)
=C2=A0(vectors 16 2= 4066)
=C2=A0(vector-slots 8 414464 16368)
=C2=A0(floats 8 28 222)
= =C2=A0(intervals 56 377 9)
=C2=A0(buffers 992 12))

=

--
Marco Antoniotti
Somewhere over the Rainbo= w
--000000000000ab80ba05fd227794--