]> git.eshelyaron.com Git - emacs.git/commitdiff
(forward-visible-line): Handle 0 arg correctly.
authorRichard M. Stallman <rms@gnu.org>
Sun, 29 Jun 1997 21:36:37 +0000 (21:36 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 29 Jun 1997 21:36:37 +0000 (21:36 +0000)
lisp/simple.el

index bcf03192b6afb16ce89edb880da29d302277a6a4..ac3ad50cecdb187f5504f5b4339b4d7ee2329b4a 100644 (file)
@@ -1157,28 +1157,32 @@ when given no argument at the beginning of a line."
                 (point))))
 
 (defun forward-visible-line (arg)
-  "Move forward by ARG lines, ignoring currently invisible newlines only."
+  "Move forward by ARG lines, ignoring currently invisible newlines only.
+If ARG is negative, move backward -ARG lines.
+If ARG is zero, move to the beginning of the current line."
   (condition-case nil
-      (progn
-       (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.
-         (while (and (not (eobp))
-                     (let ((prop
-                            (get-char-property (point) 'invisible)))
-                       (if (eq buffer-invisibility-spec t)
-                           prop
-                         (or (memq prop buffer-invisibility-spec)
-                             (assq prop buffer-invisibility-spec)))))
-           (if (get-text-property (point) 'invisible)
-               (goto-char (next-single-property-change (point) 'invisible))
-             (goto-char (next-overlay-change (point))))
-           (or (zerop (forward-line 1))
-               (signal 'end-of-buffer nil)))
-         (setq arg (1- arg)))
+      (if (>= arg 0)
+         (while (>= arg 0)
+           (if (zerop arg)
+               (beginning-of-line)
+             (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.
+           (while (and (not (eobp))
+                       (let ((prop
+                              (get-char-property (point) 'invisible)))
+                         (if (eq buffer-invisibility-spec t)
+                             prop
+                           (or (memq prop buffer-invisibility-spec)
+                               (assq prop buffer-invisibility-spec)))))
+             (if (get-text-property (point) 'invisible)
+                 (goto-char (next-single-property-change (point) 'invisible))
+               (goto-char (next-overlay-change (point))))
+             (or (zerop (forward-line 1))
+                 (signal 'end-of-buffer nil)))
+           (setq arg (1- arg)))
        (while (< arg 0)
          (or (zerop (vertical-motion -1))
              (signal 'beginning-of-buffer nil))