0. emacs -Q 1. Evaluate the following sexp: (let ((buf (get-buffer-create "*Widget Test*"))) (switch-to-buffer buf) (dolist (el '("First" "Second" "Third")) (widget-create 'push-button el)) (use-local-map widget-keymap) (widget-setup) (goto-char (point-min))) Now the current buffer is *Widget Test* containing three push-button widgets labeled "First", "Second", and "Third", and point is at the start of the first widget, at BOB. 2. Hit the TAB key (bound to widget-forward) three times: this moves point successively from "First" to "Second" to "Third" and then back to "First" -- but on returning to the initial position after the third TAB, a beginning-of-buffer error is also signaled. 3. Likewise, hitting S-TAB (bound to widget-backward) three times moves backwards across the widgets, from "Third" to "Second" to "First", again signaling a beginning-of-buffer error after the last S-TAB. These beginning-of-buffer errors are due to widget-move (the workhorse behind widget-forward and widget-backward) calling backward-char in a loop without checking for BOB. The attached patch fixes this. The patch also includes additions to widget-test-widget-move (from which most of the above sexp was taken) that test moving to a widget at BOB. (If the patch is acceptable, whoever commits it should use the correct bug# before pushing it, or I can do that myself.) 2024-03-22 Stephen Berman Prevent error on tabbing to widget at beginning of buffer (bug#xxxxx) * lisp/wid-edit.el (widget-move): Don't move backward when at beginning of buffer, and keep point on widget's left side. * test/lisp/wid-edit-tests.el (widget-test-widget-move): Adds checks that moving to a widget at beginning of buffer does not signal a beginning-of-buffer error.