# HG changeset patch # User Richard M. Stallman # Date 1155704842 0 # Node ID b11613448626d32d056d8fc4178d52c9c0c2f5df # Parent f945b59b4f0346ae72aa4d04541b68bca15ace91 (move-beginning-of-line): Test whether fields would prevent motion back to line's first visible character. If so, stop where the fields would stop the motion. diff -r f945b59b4f03 -r b11613448626 lisp/simple.el --- a/lisp/simple.el Wed Aug 16 05:05:56 2006 +0000 +++ b/lisp/simple.el Wed Aug 16 05:07:22 2006 +0000 @@ -3770,7 +3770,8 @@ (interactive "p") (or arg (setq arg 1)) - (let ((orig (point))) + (let ((orig (point)) + start first-vis first-vis-field-value) ;; Move by lines, if ARG is not 1 (the default). (if (/= arg 1) @@ -3781,10 +3782,24 @@ (while (and (not (bobp)) (line-move-invisible-p (1- (point)))) (goto-char (previous-char-property-change (point))) (skip-chars-backward "^\n")) - - ;; Take care of fields. - (goto-char (constrain-to-field (point) orig - (/= arg 1) t nil)))) + (setq start (point)) + + ;; Now find first visible char in the line + (while (and (not (eobp)) (line-move-invisible-p (point))) + (goto-char (next-char-property-change (point)))) + (setq first-vis (point)) + + ;; See if fields would stop us from reaching FIRST-VIS. + (setq first-vis-field-value + (constrain-to-field first-vis orig (/= arg 1) t nil)) + + (goto-char (if (/= first-vis-field-value first-vis) + ;; If yes, obey them. + first-vis-field-value + ;; Otherwise, move to START with attention to fields. + ;; (It is possible that fields never matter in this case.) + (constrain-to-field (point) orig + (/= arg 1) t nil))))) ;;; Many people have said they rarely use this feature, and often type