summaryrefslogtreecommitdiff
path: root/lisp/find-dired.el
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2008-06-29 08:10:56 +0000
committerAndreas Schwab <schwab@suse.de>2008-06-29 08:10:56 +0000
commit2cd119e329ebe1a50caeea3163021ead3ebbe7b0 (patch)
treee4c157193a848101841a0fab399fb1560fe924bd /lisp/find-dired.el
parent2cefb8a7ffd8ce823c651fa11c275bba91880d45 (diff)
downloademacs-2cd119e329ebe1a50caeea3163021ead3ebbe7b0.tar.gz
(find-dired-filter): Preserve point.
Diffstat (limited to 'lisp/find-dired.el')
-rw-r--r--lisp/find-dired.el83
1 files changed, 42 insertions, 41 deletions
diff --git a/lisp/find-dired.el b/lisp/find-dired.el
index 0537b6a5f84..0e4ba8f7436 100644
--- a/lisp/find-dired.el
+++ b/lisp/find-dired.el
@@ -240,48 +240,49 @@ Thus ARG can also contain additional grep options."
(inhibit-read-only t))
(if (buffer-name buf)
(with-current-buffer buf
- (save-restriction
- (widen)
- (let ((buffer-read-only nil)
- (beg (point-max))
- (l-opt (and (consp find-ls-option)
- (string-match "l" (cdr find-ls-option))))
- (ls-regexp (concat "^ +[^ \t\r\n]+\\( +[^ \t\r\n]+\\) +"
- "[^ \t\r\n]+ +[^ \t\r\n]+\\( +[0-9]+\\)")))
- (goto-char beg)
- (insert string)
- (goto-char beg)
- (or (looking-at "^")
- (forward-line 1))
- (while (looking-at "^")
- (insert " ")
- (forward-line 1))
- ;; Convert ` ./FILE' to ` FILE'
- ;; This would lose if the current chunk of output
- ;; starts or ends within the ` ./', so back up a bit:
- (goto-char (- beg 3)) ; no error if < 0
- (while (search-forward " ./" nil t)
- (delete-region (point) (- (point) 2)))
- ;; Pad the number of links and file size. This is a
- ;; quick and dirty way of getting the columns to line up
- ;; most of the time, but it's not foolproof.
- (when l-opt
+ (save-excursion
+ (save-restriction
+ (widen)
+ (let ((buffer-read-only nil)
+ (beg (point-max))
+ (l-opt (and (consp find-ls-option)
+ (string-match "l" (cdr find-ls-option))))
+ (ls-regexp (concat "^ +[^ \t\r\n]+\\( +[^ \t\r\n]+\\) +"
+ "[^ \t\r\n]+ +[^ \t\r\n]+\\( +[0-9]+\\)")))
(goto-char beg)
- (goto-char (line-beginning-position))
- (while (re-search-forward ls-regexp nil t)
- (replace-match (format "%4s" (match-string 1))
- nil nil nil 1)
- (replace-match (format "%9s" (match-string 2))
- nil nil nil 2)
- (forward-line 1)))
- ;; Find all the complete lines in the unprocessed
- ;; output and process it to add text properties.
- (goto-char (point-max))
- (if (search-backward "\n" (process-mark proc) t)
- (progn
- (dired-insert-set-properties (process-mark proc)
- (1+ (point)))
- (move-marker (process-mark proc) (1+ (point))))))))
+ (insert string)
+ (goto-char beg)
+ (or (looking-at "^")
+ (forward-line 1))
+ (while (looking-at "^")
+ (insert " ")
+ (forward-line 1))
+ ;; Convert ` ./FILE' to ` FILE'
+ ;; This would lose if the current chunk of output
+ ;; starts or ends within the ` ./', so back up a bit:
+ (goto-char (- beg 3)) ; no error if < 0
+ (while (search-forward " ./" nil t)
+ (delete-region (point) (- (point) 2)))
+ ;; Pad the number of links and file size. This is a
+ ;; quick and dirty way of getting the columns to line up
+ ;; most of the time, but it's not foolproof.
+ (when l-opt
+ (goto-char beg)
+ (goto-char (line-beginning-position))
+ (while (re-search-forward ls-regexp nil t)
+ (replace-match (format "%4s" (match-string 1))
+ nil nil nil 1)
+ (replace-match (format "%9s" (match-string 2))
+ nil nil nil 2)
+ (forward-line 1)))
+ ;; Find all the complete lines in the unprocessed
+ ;; output and process it to add text properties.
+ (goto-char (point-max))
+ (if (search-backward "\n" (process-mark proc) t)
+ (progn
+ (dired-insert-set-properties (process-mark proc)
+ (1+ (point)))
+ (move-marker (process-mark proc) (1+ (point)))))))))
;; The buffer has been killed.
(delete-process proc))))