Mercurial > emacs
changeset 102713:550a8bb34a0e
(widget-specify-field): Don't add a second overlay for a
field with just a newline character.
(widget-field-value-get): Don't reduce fields with just a space
character to null.
(character): Accept newline. (Bug#2689)
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 24 Mar 2009 02:30:15 +0000 |
parents | ab1b1cb08a25 |
children | f6d9599ddae1 |
files | lisp/ChangeLog lisp/wid-edit.el |
diffstat | 2 files changed, 19 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Mar 24 01:42:12 2009 +0000 +++ b/lisp/ChangeLog Tue Mar 24 02:30:15 2009 +0000 @@ -1,3 +1,11 @@ +2009-03-24 Glenn Morris <rgm@gnu.org> + + * wid-edit.el (widget-specify-field): Don't add a second overlay for a + field with just a newline character. + (widget-field-value-get): Don't reduce fields with just a space + character to null. + (character): Accept newline. (Bug#2689) + 2009-03-24 Kenichi Handa <handa@m17n.org> * international/fontset.el (font-encoding-alist): Add an entry for
--- a/lisp/wid-edit.el Tue Mar 24 01:42:12 2009 +0000 +++ b/lisp/wid-edit.el Tue Mar 24 02:30:15 2009 +0000 @@ -342,12 +342,16 @@ (or (not widget-field-add-space) (widget-get widget :size)))) (if (functionp help-echo) (setq help-echo 'widget-mouse-help)) - (when (= (char-before to) ?\n) + (when (and (> to (1+ from)) + (= (char-before to) ?\n)) ;; When the last character in the field is a newline, we want to ;; give it a `field' char-property of `boundary', which helps the ;; C-n/C-p act more naturally when entering/leaving the field. We - ;; do this by making a small secondary overlay to contain just that + ;; do this by making a small secondary overlay to contain just that ;; one character. + ;; We DON'T do this if the field just consists of a newline, eg + ;; when specifying a character, since it breaks things (below + ;; does 1- to, which results in to = from). Bug#2689. (let ((overlay (make-overlay (1- to) to nil t nil))) (overlay-put overlay 'field 'boundary) ;; We need the real field for tabbing. @@ -1945,7 +1949,9 @@ (set-buffer buffer) (while (and size (not (zerop size)) - (> to from) + ;; Bug#2689. Don't allow this loop to reduce a + ;; character field to zero size if it contains a space. + (> to (1+ from)) (eq (char-after (1- to)) ?\s)) (setq to (1- to))) (let ((result (buffer-substring-no-properties from to))) @@ -3450,7 +3456,8 @@ :value 0 :size 1 :format "%{%t%}: %v\n" - :valid-regexp "\\`.\\'" + ;; `.' does not match newline, but newline is a valid character. + :valid-regexp "\\`\\(.\\|\n\\)\\'" :error "This field should contain a single character" :value-to-internal (lambda (widget value) (if (stringp value)