mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-03 11:33:37 +00:00
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).
This commit is contained in:
parent
6037051f49
commit
b252e09ae4
@ -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)
|
||||
|
@ -113,4 +113,20 @@
|
||||
(should (eq (current-column)
|
||||
(widget-get grandchild :indent)))))))
|
||||
|
||||
(ert-deftest widget-test-character-widget-value ()
|
||||
"Check that we get the character widget's value correctly."
|
||||
(with-temp-buffer
|
||||
(let ((wid (widget-create '(character :value ?\n))))
|
||||
(goto-char (widget-get wid :from))
|
||||
(should (string= (widget-apply wid :value-get) "\n"))
|
||||
(should (char-equal (widget-value wid) ?\n))
|
||||
(should-not (widget-apply wid :validate)))))
|
||||
|
||||
(ert-deftest widget-test-editable-field-widget-value ()
|
||||
"Test that we get the editable field widget's value correctly."
|
||||
(with-temp-buffer
|
||||
(let ((wid (widget-create '(editable-field :value ""))))
|
||||
(widget-insert "And some non-widget text.")
|
||||
(should (string= (widget-apply wid :value-get) "")))))
|
||||
|
||||
;;; wid-edit-tests.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user