summaryrefslogtreecommitdiff
path: root/lisp/dired.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-06-15 07:59:07 +0000
committerRichard M. Stallman <rms@gnu.org>1993-06-15 07:59:07 +0000
commitcfe89c4fa50b7f7e72c0e9d3c699f00ed17025db (patch)
treec86eb561521b981e65a32ed69233832d0d588526 /lisp/dired.el
parenteebaeadde2e9cd812dd5b3eebf3860164338feb0 (diff)
downloademacs-cfe89c4fa50b7f7e72c0e9d3c699f00ed17025db.tar.gz
(dired-repeat-over-lines): Going fwd, skip new lines
that FUNCTION inserts after the current line. Going backwd, no need for dired-move-to-filename each time.
Diffstat (limited to 'lisp/dired.el')
-rw-r--r--lisp/dired.el34
1 files changed, 20 insertions, 14 deletions
diff --git a/lisp/dired.el b/lisp/dired.el
index 949eaec83f6..20a3267810d 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1542,21 +1542,27 @@ Optional argument means return a file name relative to `default-directory'."
(defun dired-repeat-over-lines (arg function)
;; This version skips non-file lines.
- (beginning-of-line)
- (while (and (> arg 0) (not (eobp)))
- (setq arg (1- arg))
- (beginning-of-line)
- (while (and (not (eobp)) (dired-between-files)) (forward-line 1))
- (save-excursion (funcall function))
- (forward-line 1))
- (while (and (< arg 0) (not (bobp)))
- (setq arg (1+ arg))
- (forward-line -1)
- (while (and (not (bobp)) (dired-between-files)) (forward-line -1))
+ (let ((pos (make-marker)))
(beginning-of-line)
- (save-excursion (funcall function))
- (dired-move-to-filename))
- (dired-move-to-filename))
+ (while (and (> arg 0) (not (eobp)))
+ (setq arg (1- arg))
+ (beginning-of-line)
+ (while (and (not (eobp)) (dired-between-files)) (forward-line 1))
+ (save-excursion
+ (forward-line 1)
+ (move-marker pos (1+ (point))))
+ (save-excursion (funcall function))
+ ;; Advance to the next line--actually, to the line that *was* next.
+ ;; (If FUNCTION inserted some new lines in between, skip them.)
+ (goto-char pos))
+ (while (and (< arg 0) (not (bobp)))
+ (setq arg (1+ arg))
+ (forward-line -1)
+ (while (and (not (bobp)) (dired-between-files)) (forward-line -1))
+ (beginning-of-line)
+ (save-excursion (funcall function)))
+ (move-marker pos nil)
+ (dired-move-to-filename)))
(defun dired-between-files ()
;; Point must be at beginning of line