diff options
author | Mauro Aranda <maurooaranda@gmail.com> | 2020-09-23 15:45:29 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2020-09-23 15:45:36 +0200 |
commit | b252e09ae4fc816ecee1971e8f0b7f207fb4a507 (patch) | |
tree | 93ad7a177ad92d1fc0c579c96a7a153e7880d357 /lisp/wid-edit.el | |
parent | 6037051f49ab5f96b406461490dba56faa2a5f35 (diff) | |
download | emacs-b252e09ae4fc816ecee1971e8f0b7f207fb4a507.tar.gz emacs-b252e09ae4fc816ecee1971e8f0b7f207fb4a507.tar.bz2 emacs-b252e09ae4fc816ecee1971e8f0b7f207fb4a507.zip |
Allow the newline character in the character widget (Bug#15925)
* lisp/wid-edit.el (widget-specify-field): Extend check for adding the
boundary overlay. Plus, a minor comment indentation fix.
(character widget): Tweak the valid-regexp to allow the newline
character.
* test/lisp/wid-edit-tests.el (widget-test-character-widget-value)
(widget-test-editable-field-widget-value): New tests (bug#15925).
Diffstat (limited to 'lisp/wid-edit.el')
-rw-r--r-- | lisp/wid-edit.el | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 13d850a57f5..8ad99f49aa1 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -303,12 +303,15 @@ the :notify function can't know the new value.") (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 (or (> to (1+ from)) (null (widget-get widget :size))) + (= (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 - ;; one character. + ;; do this by making a small secondary overlay to contain just that + ;; one character. BUT we only do this if there is more than one + ;; character (so we don't do this for the character widget), + ;; or if the size of the editable field isn't specified. (let ((overlay (make-overlay (1- to) to nil t nil))) (overlay-put overlay 'field 'boundary) ;; We need the real field for tabbing. @@ -3524,7 +3527,7 @@ To use this type, you must define :match or :match-alternatives." :value 0 :size 1 :format "%{%t%}: %v\n" - :valid-regexp "\\`.\\'" + :valid-regexp "\\`\\(.\\|\n\\)\\'" :error "This field should contain a single character" :value-get (lambda (w) (widget-field-value-get w t)) :value-to-internal (lambda (_widget value) |