bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#31309: 26.1; Customize widget :type 'text reports "bad format"


From: Phil Sainty
Subject: bug#31309: 26.1; Customize widget :type 'text reports "bad format"
Date: Sun, 29 Apr 2018 21:21:32 +1200
User-agent: Orcon Webmail

It seems that the multi-line `text' widget is broken.  e.g.:

(defcustom foo
  "Text value\nspanning multiple\nlines."
  "Multi-line text field."
  :type 'text)

M-x customize-option RET foo RET

Message: custom-variable-value-create: Bad format


wid-edit.el defines the `text' widget like so:

(define-widget 'text 'editable-field
  "A multiline text area."
  :keymap widget-text-keymap)


The `string' widget (an 'editable-field derivative which works fine)
is defined as:

(define-widget 'string 'editable-field
  "A string"
  :tag "String"
  :format "%{%t%}: %v"
  :complete-function 'ispell-complete-word
  :prompt-history 'widget-string-prompt-value-history)

I also see that the parent `editable-field' widget says:
"Note: In an ‘editable-field’ widget, the ‘%v’ escape must be preceded
by some other text in the ‘:format’ string (if specified)."

If I redefine `text' as follows (by copying the :format from `string')
then the widget seems to work correctly.

(define-widget 'text 'editable-field
  "A multiline text area."
  :format "%{%t%}: %v"
  :keymap widget-text-keymap)


I'm not familiar with the internals of widgets, so I don't know if
this is the best fix, but I see that all the other `define-widget'
derivatives of `editable-field' do have explicit :format strings.

However I would have thought that in the absence of an explicit
:format, a *valid* default would be used, so I think the main bug
is in `editable-field' itself, which does not follow its own rule
when defining its own :format, which is simply "%v" (testing confirms
that this value is used by default for derivative widgets which do
not override :format).

(define-widget 'editable-field 'default
  "An editable text field.
Note: In an `editable-field' widget, the `%v' escape must be preceded
by some other text in the `:format' string (if specified)."
  :convert-widget 'widget-value-convert-widget
  :keymap widget-field-keymap
  :format "%v"
  ...)

Changing that to :format "%{%t%}: %v" proves to successfully resolve
the original problem when the `text' widget definition is reverted.

n.b. In the process of testing I noticed that "preceded by some other
text" is not entirely accurate, as a value of " %v" (with a leading
space) continued to trigger the bug.


I also note that grepping for 'editable-field in general turns up a
pile of uses of (widget-create 'editable-field) which also do not
follow the same rule; either omitting the format:

(setq widget (widget-create 'editable-field :size 15))

or setting a :format which begins with "%v":

(setq comment-widget
      (widget-create 'editable-field
                     :size 60
                     :format "%v "
                     :value (or (image-dired-get-comment file) "")))

I've not attempted to test any of that code, so I don't know
whether the same problem would occur.





In GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2018-04-15 built on shodan
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description:     Ubuntu 16.04.4 LTS

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Mark set [2 times]
drush-php-psysh-config
Creating customization items...
custom-variable-value-create: Bad format

Configured using:
 'configure --prefix=/home/phil/emacs/26.1rc1/usr/local
 --with-x-toolkit=lucid --without-sound'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK DBUS GSETTINGS NOTIFY
GNUTLS LIBXML2 FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11 THREADS
LCMS2

Important settings:
  value of $LANG: en_NZ.UTF-8
  locale-coding-system: utf-8

Major mode: Lisp Interaction

Minor modes in effect:
  show-paren-mode: t
  minibuffer-depth-indicate-mode: t
  winner-mode: t
  global-hl-line-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-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 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 thingatpt help-fns radix-tree help-mode cus-edit cus-start
cus-load wid-edit cl-loaddefs cl-lib dired-x easymenu paren mb-depth
winner ring hl-line dired dired-loaddefs advice 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 lcms2
dynamic-setting system-font-setting font-render-setting x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 120787 7713)
 (symbols 48 22375 1)
 (miscs 40 156 240)
 (strings 32 34344 1244)
 (string-bytes 1 884748)
 (vectors 16 15684)
 (vector-slots 8 507442 10438)
 (floats 8 66 51)
 (intervals 56 302 0)
 (buffers 992 15)
 (heap 1024 33490 1603))






reply via email to

[Prev in Thread] Current Thread [Next in Thread]