mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 04:10:54 -08:00
Don't indent unrelated widgets following widget of type 'other
* lisp/wid-edit.el (widget 'other): Use \n instead of the %n escape in the :format property of this widget. If %n is used at the end of the format string, unrelated widgets get indented. (Bug#12533) * test/wid-edit-tests.el (widget-test-indentation-after-%n) (widget-test-indentation-after-newline) (widget-test-newline-and-indent-same-widget): New tests.
This commit is contained in:
parent
08fbe91dfe
commit
45524b9702
2 changed files with 78 additions and 1 deletions
|
|
@ -3063,7 +3063,7 @@ as in (other DEFAULT) or (other :tag \"NAME\" DEFAULT).
|
|||
If the user selects this alternative, that specifies DEFAULT
|
||||
as the value."
|
||||
:tag "Other"
|
||||
:format "%t%n"
|
||||
:format "%t\n"
|
||||
:value 'other)
|
||||
|
||||
(defvar widget-string-prompt-value-history nil
|
||||
|
|
|
|||
|
|
@ -36,4 +36,81 @@
|
|||
(insert-button "overlay button")
|
||||
(should-not (widget-at (1- (point))))))
|
||||
|
||||
;; The following three tests compare the effect of using either %n or \n at the
|
||||
;; end of a format string, as well as using %n at the end or in the middle of
|
||||
;; the format string. (Bug#12533)
|
||||
|
||||
(ert-deftest widget-test-indentation-after-%n ()
|
||||
"Fail when %n is used at the end of a format string."
|
||||
:expected-result :failed
|
||||
(with-temp-buffer
|
||||
(let (wid indented)
|
||||
(widget-insert "Testing indentation.\n")
|
||||
;; If we use %n at the end of the format string of the widget `other', we
|
||||
;; screw up indentation of the following widgets.
|
||||
(setq wid (widget-create
|
||||
'(repeat :indent 4
|
||||
(cons
|
||||
string (choice (other :tag "Other" :format "%t%n" c))))))
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
;; Since we indent the `repeat' widget, we skip the space characters
|
||||
;; inserted.
|
||||
(skip-chars-forward " ")
|
||||
(setq indented (current-column)) ; Save the column to which we indented.
|
||||
(should (eq indented (or (widget-get wid :indent) 0)))
|
||||
;; Insert an entry. This simulates a click or RET at the INS button.
|
||||
(widget-apply (widget-at) :action)
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
(skip-chars-forward " ")
|
||||
;; This fails, because the button is not at the right column.
|
||||
(should (eq (current-column) indented)))))
|
||||
|
||||
(ert-deftest widget-test-indentation-after-newline ()
|
||||
"Pass when the newline is used at the end of a format string."
|
||||
(with-temp-buffer
|
||||
(let (wid indented)
|
||||
(widget-insert "Testing indentation.\n")
|
||||
(setq wid (widget-create
|
||||
'(repeat :indent 4
|
||||
(cons
|
||||
string
|
||||
(choice (other :tag "Other" :format "%t\n" c))))))
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
(skip-chars-forward " ")
|
||||
(setq indented (current-column))
|
||||
(should (eq (current-column) (or (widget-get wid :indent) 0)))
|
||||
(widget-apply (widget-at) :action)
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
(skip-chars-forward " ")
|
||||
;; Because we used \n in the format string, this pass.
|
||||
(should (eq (current-column) indented)))))
|
||||
|
||||
(ert-deftest widget-test-newline-and-indent-same-widget ()
|
||||
"It's OK to use the %n escape sequence in the middle of the format string."
|
||||
(with-temp-buffer
|
||||
(let (wid indented)
|
||||
(widget-insert "Testing indentation.\n")
|
||||
(setq wid (widget-create
|
||||
'(repeat :indent 4
|
||||
:format "%{%t%}:%n%v%i\n"
|
||||
(cons
|
||||
string
|
||||
(choice (other :tag "Other" :format "%t\n" c))))))
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
(skip-chars-forward " ")
|
||||
(setq indented (current-column))
|
||||
(should (eq indented (or (widget-get wid :indent) 0)))
|
||||
(widget-apply (widget-at) :action)
|
||||
(goto-char (widget-get wid :value-pos))
|
||||
(skip-chars-forward " ")
|
||||
(should (eq (current-column) indented))
|
||||
|
||||
;; Also, the children are indented correctly.
|
||||
(let ((grandchild
|
||||
;; This gets the `string' widget.
|
||||
(car (widget-get (car (widget-get wid :children)) :children))))
|
||||
(goto-char (widget-get grandchild :from))
|
||||
(should (eq (current-column)
|
||||
(widget-get grandchild :indent)))))))
|
||||
|
||||
;;; wid-edit-tests.el ends here
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue