diff options
author | Richard M. Stallman <[email protected]> | 1997-07-12 06:33:49 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 1997-07-12 06:33:49 +0000 |
commit | 29df77ba6cee42f1fbf6c022c2474c35a354e540 (patch) | |
tree | 975e63f51524af528bd262b81ddf6966fad15db4 /lisp | |
parent | 2384c010d256c3201a522bdf1485c39ec07ea211 (diff) |
(forward-visible-line): Correctly handle arg 0
so that it doesn't mess up handling of nonzero args.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/simple.el | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/lisp/simple.el b/lisp/simple.el index a60e86b0dd..a4bb36f871 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1166,12 +1166,10 @@ by typing \\[beginning-of-line] \\[kill-line]." If ARG is negative, move backward -ARG lines. If ARG is zero, move to the beginning of the current line." (condition-case nil - (if (>= arg 0) - (while (>= arg 0) - (if (zerop arg) - (beginning-of-line) - (or (zerop (forward-line 1)) - (signal 'end-of-buffer nil))) + (if (> arg 0) + (while (> arg 0) + (or (zerop (forward-line 1)) + (signal 'end-of-buffer nil)) ;; If the following character is currently invisible, ;; skip all characters with that same `invisible' property value, ;; then find the next newline. @@ -1188,22 +1186,26 @@ If ARG is zero, move to the beginning of the current line." (or (zerop (forward-line 1)) (signal 'end-of-buffer nil))) (setq arg (1- arg))) - (while (< arg 0) - (or (zerop (forward-line -1)) - (signal 'beginning-of-buffer nil)) - (while (and (not (bobp)) - (let ((prop - (get-char-property (1- (point)) 'invisible))) - (if (eq buffer-invisibility-spec t) - prop - (or (memq prop buffer-invisibility-spec) - (assq prop buffer-invisibility-spec))))) - (if (get-text-property (1- (point)) 'invisible) - (goto-char (previous-single-property-change (point) 'invisible)) - (goto-char (previous-overlay-change (point)))) - (or (zerop (forward-line -1)) - (signal 'beginning-of-buffer nil))) - (setq arg (1+ arg)))) + (let ((first t)) + (while (or first (< arg 0)) + (if (zerop arg) + (beginning-of-line) + (or (zerop (forward-line -1)) + (signal 'beginning-of-buffer nil))) + (while (and (not (bobp)) + (let ((prop + (get-char-property (1- (point)) 'invisible))) + (if (eq buffer-invisibility-spec t) + prop + (or (memq prop buffer-invisibility-spec) + (assq prop buffer-invisibility-spec))))) + (if (get-text-property (1- (point)) 'invisible) + (goto-char (previous-single-property-change (point) 'invisible)) + (goto-char (previous-overlay-change (point)))) + (or (zerop (forward-line -1)) + (signal 'beginning-of-buffer nil))) + (setq first nil) + (setq arg (1+ arg))))) ((beginning-of-buffer end-of-buffer) nil))) |