Mercurial > emacs
changeset 72411:b11613448626
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 16 Aug 2006 05:07:22 +0000 |
parents | f945b59b4f03 |
children | ec8109b4dd1d |
files | lisp/simple.el |
diffstat | 1 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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