diff lisp/dired.el @ 30414:a8e324dcc228

(dired-sort-R-check): Added to allow recursive listing to be undone. (dired-sort-other): Use it.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 12:27:26 +0000
parents 28542f84f184
children 78337ade0189
line wrap: on
line diff
--- a/lisp/dired.el	Mon Jul 24 12:22:54 2000 +0000
+++ b/lisp/dired.el	Mon Jul 24 12:27:26 2000 +0000
@@ -2632,9 +2632,45 @@
   ;; `dired-sort-by-date-regexp' or `dired-sort-by-name-regexp' set the
   ;; minor mode accordingly, others appear literally in the mode line.
   ;; With optional second arg NO-REVERT, don't refresh the listing afterwards.
+  (dired-sort-R-check switches)
   (setq dired-actual-switches switches)
   (if (eq major-mode 'dired-mode) (dired-sort-set-modeline))
   (or no-revert (revert-buffer)))
+
+(make-variable-buffer-local
+ (defvar dired-subdir-alist-pre-R nil
+   "Value of `dired-subdir-alist' before -R switch added."))
+
+(defun dired-sort-R-check (switches)
+  "Additional processing of -R in ls option string SWITCHES.
+Saves `dired-subdir-alist' when R is set and restores saved value
+minus any directories explicitly deleted when R is cleared.
+To be called first in body of `dired-sort-other', etc."
+  (cond
+   ((and (string-match "R" switches)
+	 (not (string-match "R" dired-actual-switches)))
+    ;; Adding -R to ls switches -- save `dired-subdir-alist':
+    (setq dired-subdir-alist-pre-R dired-subdir-alist))
+   ((and (string-match "R" dired-actual-switches)
+	 (not (string-match "R" switches)))
+    ;; Deleting -R from ls switches -- revert to pre-R subdirs
+    ;; that are still present:
+    (setq dired-subdir-alist
+	  (if dired-subdir-alist-pre-R
+	      (let (subdirs)
+		(while dired-subdir-alist-pre-R
+		  (if (assoc (caar dired-subdir-alist-pre-R)
+			     dired-subdir-alist)
+		      ;; subdir still present...
+		      (setq subdirs
+			    (cons (car dired-subdir-alist-pre-R)
+				  subdirs)))
+		  (setq dired-subdir-alist-pre-R
+			(cdr dired-subdir-alist-pre-R)))
+		(reverse subdirs))
+	    ;; No pre-R subdir alist, so revert to main directory
+	    ;; listing:
+	    (list (car (reverse dired-subdir-alist))))))))
 
 ;; To make this file smaller, the less common commands
 ;; go in a separate file.  But autoload them here