all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* dired-aux.el
@ 2004-06-01  3:21 Luc Teirlinck
  2004-06-01  4:03 ` dired-aux.el Stefan Monnier
  0 siblings, 1 reply; 3+ messages in thread
From: Luc Teirlinck @ 2004-06-01  3:21 UTC (permalink / raw)


Below is a patch to dired-aux.  It corrects various problems with
reverting or auto-reverting Dired buffers, as well as various problems
in *Locate* and *Find* buffers with inserted subdirectories.

Basically, all three types of changes made by the patch are necessary
to be able to properly auto-revert dired buffers with subdirectories
(currently Dired buffers with inserted subdirectories can not be
auto-reverted).  One is necessary for several other reasons.

Currently, reverting a dired buffer overrides user specified (using
`C-u i' or `C-u l") alternate switches for subdirectories, replacing
them with the general default for the buffer.  I do not believe that
makes sense.  My patch below makes dired remember and respect those
switches.  In my opinion it corrects a misfeature in Dired itself.
The change is necessary to make updating of subdirectories work
properly in *Locate* and *Find* buffers and it is one of the three
changes necessary to make autoreverting Dired buffers work
properly even with inserted subdirectories.

One problem with auto-reverting is that auto-revert should not
auto-revert modified Dired buffers.  Otherwise dired-undo and various
other Dired functionality ceases to work.  But Dired for various
reasons inappropriately (for auto-revert) marks a Dired buffer as
"modified".  This includes inserting subdirectories.  Buffers with
inserted subdirectories stay marked modified, even after `g'.  As a
consequence, they never auto-revert.  The patch below ensures that
inserting, deleting, hiding or unhiding subdirectories will no longer
mark a Dired buffer as modified.  As a result, such dired buffers will
auto-revert.  The two other types of changes in the patch assure that
this will not cause problems.

The third change is to get rid of messages produced by reverting
subdirectories.  This could produce tons of noise if auto-reverting is
enabled.  We already discussed the involved problems for the main
directory and decided to get rid of the messages.  It would be
inconsistent (and confusing) not to do the same for subdirectories.

===File ~/dired-aux-diff====================================
*** dired-aux.el	01 May 2004 10:36:25 -0500	1.118
--- dired-aux.el	29 May 2004 20:50:00 -0500	
***************
*** 620,625 ****
--- 620,629 ----
  	  (forward-line -1))))
      (dired-move-to-filename)))
  
+ (defvar dired-switches-alist nil
+   "Keeps track of which switches to use for inserted subdirectories.
+ This is an alist of the form (SUBDIR . SWITCHES).")
+ 
  ;;;###autoload
  (defun dired-do-kill-lines (&optional arg fmt)
    "Kill all marked lines (not the files).
***************
*** 631,637 ****
    (interactive "P")
    (if arg
        (if (dired-get-subdir)
! 	  (dired-kill-subdir)
  	(dired-kill-line arg))
      (save-excursion
        (goto-char (point-min))
--- 635,646 ----
    (interactive "P")
    (if arg
        (if (dired-get-subdir)
! 	  (let ((cons (assoc-string (dired-get-subdir) dired-switches-alist))
! 		(modflag (buffer-modified-p)))
! 	    (when cons
! 	      (setq dired-switches-alist (delete cons dired-switches-alist)))
! 	    (dired-kill-subdir)
! 	    (set-buffer-modified-p modflag))
  	(dired-kill-line arg))
      (save-excursion
        (goto-char (point-min))
***************
*** 894,913 ****
  a prefix arg lets you edit the `ls' switches used for the new listing."
    ;; Moves point if the next ARG files are redisplayed.
    (interactive "P\np")
!   (if (and test-for-subdir (dired-get-subdir))
!       (dired-insert-subdir
!        (dired-get-subdir)
!        (if arg (read-string "Switches for listing: " dired-actual-switches)))
!     (message "Redisplaying...")
!     ;; message much faster than making dired-map-over-marks show progress
!     (dired-uncache
!      (if (consp dired-directory) (car dired-directory) dired-directory))
!     (dired-map-over-marks (let ((fname (dired-get-filename)))
! 			    (message "Redisplaying... %s" fname)
! 			    (dired-update-file-line fname))
! 			  arg)
!     (dired-move-to-filename)
!     (message "Redisplaying...done")))
  \f
  (defun dired-update-file-line (file)
    ;; Delete the current line, and insert an entry for FILE.
--- 903,926 ----
  a prefix arg lets you edit the `ls' switches used for the new listing."
    ;; Moves point if the next ARG files are redisplayed.
    (interactive "P\np")
!   (let* ((dir (dired-get-subdir))
! 	 (switches (cdr (assoc-string dir dired-switches-alist))))
!     (if (and test-for-subdir dir)
! 	(dired-insert-subdir
! 	 dir
! 	 (when arg
! 	   (read-string "Switches for listing: "
! 			(or switches dired-actual-switches))))
!       (message "Redisplaying...")
!       ;; message much faster than making dired-map-over-marks show progress
!       (dired-uncache
!        (if (consp dired-directory) (car dired-directory) dired-directory))
!       (dired-map-over-marks (let ((fname (dired-get-filename)))
! 			      (message "Redisplaying... %s" fname)
! 			      (dired-update-file-line fname))
! 			    arg)
!       (dired-move-to-filename)
!       (message "Redisplaying...done"))))
  \f
  (defun dired-update-file-line (file)
    ;; Delete the current line, and insert an entry for FILE.
***************
*** 1751,1762 ****
  	 (if current-prefix-arg
  	     (read-string "Switches for listing: " dired-actual-switches))))
    (setq dirname (file-name-as-directory (expand-file-name dirname)))
!   (dired-insert-subdir-validate dirname switches)
    (or no-error-if-not-dir-p
        (file-directory-p dirname)
        (error  "Attempt to insert a non-directory: %s" dirname))
    (let ((elt (assoc dirname dired-subdir-alist))
! 	 switches-have-R mark-alist case-fold-search buffer-read-only)
      ;; case-fold-search is nil now, so we can test for capital `R':
      (if (setq switches-have-R (and switches (string-match "R" switches)))
  	;; avoid duplicated subdirs
--- 1764,1781 ----
  	 (if current-prefix-arg
  	     (read-string "Switches for listing: " dired-actual-switches))))
    (setq dirname (file-name-as-directory (expand-file-name dirname)))
!   (let ((cons (assoc-string dirname dired-switches-alist)))
!     (if switches
! 	(if cons
! 	    (setcdr cons switches)
! 	  (push (cons dirname switches) dired-switches-alist)))
!     (when cons (setq switches (cdr cons))))
    (or no-error-if-not-dir-p
        (file-directory-p dirname)
        (error  "Attempt to insert a non-directory: %s" dirname))
    (let ((elt (assoc dirname dired-subdir-alist))
! 	(modflag (buffer-modified-p))
! 	switches-have-R mark-alist case-fold-search buffer-read-only)
      ;; case-fold-search is nil now, so we can test for capital `R':
      (if (setq switches-have-R (and switches (string-match "R" switches)))
  	;; avoid duplicated subdirs
***************
*** 1769,1775 ****
       dirname elt (dired-insert-subdir-doinsert dirname switches))
      (if switches-have-R (dired-build-subdir-alist switches))
      (dired-initial-position dirname)
!     (save-excursion (dired-mark-remembered mark-alist))))
  
  ;; This is a separate function for dired-vms.
  (defun dired-insert-subdir-validate (dirname &optional switches)
--- 1788,1795 ----
       dirname elt (dired-insert-subdir-doinsert dirname switches))
      (if switches-have-R (dired-build-subdir-alist switches))
      (dired-initial-position dirname)
!     (save-excursion (dired-mark-remembered mark-alist))
!     (set-buffer-modified-p modflag)))
  
  ;; This is a separate function for dired-vms.
  (defun dired-insert-subdir-validate (dirname &optional switches)
***************
*** 1855,1861 ****
    ;; Return the boundary of the inserted text (as list of BEG and END).
    (save-excursion
      (let ((begin (point)))
-       (message "Reading directory %s..." dirname)
        (let ((dired-actual-switches
  	     (or switches
  		 (dired-replace-in-string "R" "" dired-actual-switches))))
--- 1875,1880 ----
***************
*** 1864,1870 ****
  	    ;; redo it as specified in dired-directory.
  	    (dired-readin-insert)
  	  (dired-insert-directory dirname dired-actual-switches nil nil t)))
-       (message "Reading directory %s...done" dirname)
        (list begin (point)))))
  
  (defun dired-insert-subdir-doupdate (dirname elt beg-end)
--- 1883,1888 ----
***************
*** 2077,2095 ****
  Use \\[dired-hide-all] to (un)hide all directories."
    (interactive "p")
    (dired-hide-check)
!   (while (>=  (setq arg (1- arg)) 0)
!     (let* ((cur-dir (dired-current-directory))
! 	   (hidden-p (dired-subdir-hidden-p cur-dir))
! 	   (elt (assoc cur-dir dired-subdir-alist))
! 	   (end-pos (1- (dired-get-subdir-max elt)))
! 	   buffer-read-only)
!       ;; keep header line visible, hide rest
!       (goto-char (dired-get-subdir-min elt))
!       (skip-chars-forward "^\n\r")
!       (if hidden-p
! 	  (subst-char-in-region (point) end-pos ?\r ?\n)
! 	(subst-char-in-region (point) end-pos ?\n ?\r)))
!     (dired-next-subdir 1 t)))
  
  ;;;###autoload
  (defun dired-hide-all (arg)
--- 2095,2115 ----
  Use \\[dired-hide-all] to (un)hide all directories."
    (interactive "p")
    (dired-hide-check)
!   (let ((modflag (buffer-modified-p)))
!     (while (>=  (setq arg (1- arg)) 0)
!       (let* ((cur-dir (dired-current-directory))
! 	     (hidden-p (dired-subdir-hidden-p cur-dir))
! 	     (elt (assoc cur-dir dired-subdir-alist))
! 	     (end-pos (1- (dired-get-subdir-max elt)))
! 	     buffer-read-only)
! 	;; keep header line visible, hide rest
! 	(goto-char (dired-get-subdir-min elt))
! 	(skip-chars-forward "^\n\r")
! 	(if hidden-p
! 	    (subst-char-in-region (point) end-pos ?\r ?\n)
! 	  (subst-char-in-region (point) end-pos ?\n ?\r)))
!       (dired-next-subdir 1 t))
!     (set-buffer-modified-p modflag)))
  
  ;;;###autoload
  (defun dired-hide-all (arg)
***************
*** 2098,2104 ****
  Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
    (interactive "P")
    (dired-hide-check)
!   (let (buffer-read-only)
      (if (save-excursion
  	  (goto-char (point-min))
  	  (search-forward "\r" nil t))
--- 2118,2125 ----
  Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
    (interactive "P")
    (dired-hide-check)
!   (let ((modflag (buffer-modified-p))
! 	buffer-read-only)
      (if (save-excursion
  	  (goto-char (point-min))
  	  (search-forward "\r" nil t))
***************
*** 2107,2113 ****
        ;; hide
        (let ((pos (point-max))		; pos of end of last directory
  	    (alist dired-subdir-alist))
! 	(while alist			; while there are dirs before pos
  	  (subst-char-in-region (dired-get-subdir-min (car alist)) ; pos of prev dir
  				(save-excursion
  				  (goto-char pos) ; current dir
--- 2128,2134 ----
        ;; hide
        (let ((pos (point-max))		; pos of end of last directory
  	    (alist dired-subdir-alist))
! 	(while alist		     ; while there are dirs before pos
  	  (subst-char-in-region (dired-get-subdir-min (car alist)) ; pos of prev dir
  				(save-excursion
  				  (goto-char pos) ; current dir
***************
*** 2116,2122 ****
  				  (point))
  				?\n ?\r)
  	  (setq pos (dired-get-subdir-min (car alist)))	; prev dir gets current dir
! 	  (setq alist (cdr alist)))))))
  
  ;;;###end dired-ins.el
  
--- 2137,2144 ----
  				  (point))
  				?\n ?\r)
  	  (setq pos (dired-get-subdir-min (car alist)))	; prev dir gets current dir
! 	  (setq alist (cdr alist)))))
!     (set-buffer-modified-p modflag)))
  
  ;;;###end dired-ins.el
  
============================================================

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: dired-aux.el
  2004-06-01  3:21 dired-aux.el Luc Teirlinck
@ 2004-06-01  4:03 ` Stefan Monnier
  0 siblings, 0 replies; 3+ messages in thread
From: Stefan Monnier @ 2004-06-01  4:03 UTC (permalink / raw)
  Cc: emacs-devel

> ! 	  (let ((cons (assoc-string (dired-get-subdir) dired-switches-alist))
> ! 		(modflag (buffer-modified-p)))
> ! 	    (when cons
> ! 	      (setq dired-switches-alist (delete cons dired-switches-alist)))
> ! 	    (dired-kill-subdir)
> ! 	    (set-buffer-modified-p modflag))

You should probably use restore-buffer-modified-p here.


        Stefan

^ permalink raw reply	[flat|nested] 3+ messages in thread

* dired-aux.el
@ 2004-06-03  3:49 Luc Teirlinck
  0 siblings, 0 replies; 3+ messages in thread
From: Luc Teirlinck @ 2004-06-03  3:49 UTC (permalink / raw)


Below is the latest patch to dired-aux.el.  It contains various
corrections and improvements, but implements the same functionality
as the original.

===File ~/dired-aux-diff====================================
*** dired-aux.el	01 May 2004 10:36:25 -0500	1.118
--- dired-aux.el	02 Jun 2004 14:18:06 -0500	
***************
*** 895,903 ****
    ;; Moves point if the next ARG files are redisplayed.
    (interactive "P\np")
    (if (and test-for-subdir (dired-get-subdir))
!       (dired-insert-subdir
!        (dired-get-subdir)
!        (if arg (read-string "Switches for listing: " dired-actual-switches)))
      (message "Redisplaying...")
      ;; message much faster than making dired-map-over-marks show progress
      (dired-uncache
--- 895,909 ----
    ;; Moves point if the next ARG files are redisplayed.
    (interactive "P\np")
    (if (and test-for-subdir (dired-get-subdir))
!       (let* ((dir (dired-get-subdir))
! 	     (switches (cdr (assoc-string dir dired-switches-alist))))
! 	(dired-insert-subdir
! 	 dir
! 	 (when arg
! 	   (read-string "Switches for listing: "
! 			(or switches
! 			    dired-subdir-switches
! 			    dired-actual-switches)))))
      (message "Redisplaying...")
      ;; message much faster than making dired-map-over-marks show progress
      (dired-uncache
***************
*** 1223,1232 ****
  	(if (re-search-forward regexp (match-end 1) t)
  	    (replace-match newtext t t)
  	  (error "Expected to find `%s' in headerline of %s" dir (car elt))))
!       ;; Update buffer-local dired-subdir-alist
!       (setcar elt
! 	      (dired-normalize-subdir
! 	       (dired-replace-in-string regexp newtext (car elt)))))))
  \f
  ;; The basic function for half a dozen variations on cp/mv/ln/ln -s.
  (defun dired-create-files (file-creator operation fn-list name-constructor
--- 1229,1240 ----
  	(if (re-search-forward regexp (match-end 1) t)
  	    (replace-match newtext t t)
  	  (error "Expected to find `%s' in headerline of %s" dir (car elt))))
!       ;; Update buffer-local dired-subdir-alist and dired-switches-alist
!       (let ((cons (assoc-string (car elt) dired-switches-alist))
! 	    (cur-dir (dired-normalize-subdir
! 		      (dired-replace-in-string regexp newtext (car elt)))))
! 	(setcar elt cur-dir)
! 	(when cons (setcar cons cur-dir))))))
  \f
  ;; The basic function for half a dozen variations on cp/mv/ln/ln -s.
  (defun dired-create-files (file-creator operation fn-list name-constructor
***************
*** 1722,1728 ****
    (interactive
     (list (dired-get-filename)
  	 (if current-prefix-arg
! 	     (read-string "Switches for listing: " dired-actual-switches))))
    (let ((opoint (point)))
      ;; We don't need a marker for opoint as the subdir is always
      ;; inserted *after* opoint.
--- 1730,1737 ----
    (interactive
     (list (dired-get-filename)
  	 (if current-prefix-arg
! 	     (read-string "Switches for listing: "
! 			  (or dired-subdir-switches dired-actual-switches)))))
    (let ((opoint (point)))
      ;; We don't need a marker for opoint as the subdir is always
      ;; inserted *after* opoint.
***************
*** 1749,1762 ****
    (interactive
     (list (dired-get-filename)
  	 (if current-prefix-arg
! 	     (read-string "Switches for listing: " dired-actual-switches))))
    (setq dirname (file-name-as-directory (expand-file-name dirname)))
-   (dired-insert-subdir-validate dirname switches)
    (or no-error-if-not-dir-p
        (file-directory-p dirname)
        (error  "Attempt to insert a non-directory: %s" dirname))
    (let ((elt (assoc dirname dired-subdir-alist))
! 	 switches-have-R mark-alist case-fold-search buffer-read-only)
      ;; case-fold-search is nil now, so we can test for capital `R':
      (if (setq switches-have-R (and switches (string-match "R" switches)))
  	;; avoid duplicated subdirs
--- 1758,1776 ----
    (interactive
     (list (dired-get-filename)
  	 (if current-prefix-arg
! 	     (read-string "Switches for listing: "
! 			  (or dired-subdir-switches dired-actual-switches)))))
    (setq dirname (file-name-as-directory (expand-file-name dirname)))
    (or no-error-if-not-dir-p
        (file-directory-p dirname)
        (error  "Attempt to insert a non-directory: %s" dirname))
    (let ((elt (assoc dirname dired-subdir-alist))
! 	(cons (assoc-string dirname dired-switches-alist))
! 	(modflag (buffer-modified-p))
! 	(old-switches switches)
! 	switches-have-R mark-alist case-fold-search buffer-read-only)
!     (and (not switches) cons (setq switches (cdr cons)))
!     (dired-insert-subdir-validate dirname switches)
      ;; case-fold-search is nil now, so we can test for capital `R':
      (if (setq switches-have-R (and switches (string-match "R" switches)))
  	;; avoid duplicated subdirs
***************
*** 1767,1775 ****
        (dired-insert-subdir-newpos dirname)) ; else compute new position
      (dired-insert-subdir-doupdate
       dirname elt (dired-insert-subdir-doinsert dirname switches))
!     (if switches-have-R (dired-build-subdir-alist switches))
      (dired-initial-position dirname)
!     (save-excursion (dired-mark-remembered mark-alist))))
  
  ;; This is a separate function for dired-vms.
  (defun dired-insert-subdir-validate (dirname &optional switches)
--- 1781,1802 ----
        (dired-insert-subdir-newpos dirname)) ; else compute new position
      (dired-insert-subdir-doupdate
       dirname elt (dired-insert-subdir-doinsert dirname switches))
!     (when old-switches
!       (if cons
! 	  (setcdr cons switches)
! 	(push (cons dirname switches) dired-switches-alist)))
!     (when switches-have-R
!       (dired-build-subdir-alist switches)
!       (dolist (cur-ass dired-subdir-alist)
! 	(when (string-match (concat "\\`" dirname ".+") (car cur-ass))
! 	  ;; By the earlier call to dired-kill-tree, we know that the
! 	  ;; directory (car cur-ass) can not occur as a key in
! 	  ;; dired-switches-alist, so the next line will not create a
! 	  ;; duplicate entry.
! 	  (push (cons (car cur-ass) switches) dired-switches-alist))))
      (dired-initial-position dirname)
!     (save-excursion (dired-mark-remembered mark-alist))
!     (set-buffer-modified-p modflag)))
  
  ;; This is a separate function for dired-vms.
  (defun dired-insert-subdir-validate (dirname &optional switches)
***************
*** 1777,1793 ****
    ;; Signal an error if invalid (e.g. user typed `i' on `..').
    (or (dired-in-this-tree dirname (expand-file-name default-directory))
        (error  "%s: not in this directory tree" dirname))
!   (if switches
        (let (case-fold-search)
  	(mapcar
  	 (function
  	  (lambda (x)
! 	    (or (eq (null (string-match x switches))
  		    (null (string-match x dired-actual-switches)))
! 		(error "Can't have dirs with and without -%s switches together"
! 		       x))))
  	 ;; all switches that make a difference to dired-get-filename:
! 	 '("F" "b")))))
  
  (defun dired-alist-add (dir new-marker)
    ;; Add new DIR at NEW-MARKER.  Sort alist.
--- 1804,1821 ----
    ;; Signal an error if invalid (e.g. user typed `i' on `..').
    (or (dired-in-this-tree dirname (expand-file-name default-directory))
        (error  "%s: not in this directory tree" dirname))
!   (let ((real-switches (or switches dired-subdir-switches)))
!     (when real-switches
        (let (case-fold-search)
  	(mapcar
  	 (function
  	  (lambda (x)
! 	    (or (eq (null (string-match x real-switches))
  		    (null (string-match x dired-actual-switches)))
! 		(error
! 		 "Can't have dirs with and without -%s switches together" x))))
  	 ;; all switches that make a difference to dired-get-filename:
! 	 '("F" "b"))))))
  
  (defun dired-alist-add (dir new-marker)
    ;; Add new DIR at NEW-MARKER.  Sort alist.
***************
*** 1855,1870 ****
    ;; Return the boundary of the inserted text (as list of BEG and END).
    (save-excursion
      (let ((begin (point)))
-       (message "Reading directory %s..." dirname)
        (let ((dired-actual-switches
  	     (or switches
  		 (dired-replace-in-string "R" "" dired-actual-switches))))
  	(if (equal dirname (car (car (last dired-subdir-alist))))
  	    ;; If doing the top level directory of the buffer,
  	    ;; redo it as specified in dired-directory.
  	    (dired-readin-insert)
  	  (dired-insert-directory dirname dired-actual-switches nil nil t)))
-       (message "Reading directory %s...done" dirname)
        (list begin (point)))))
  
  (defun dired-insert-subdir-doupdate (dirname elt beg-end)
--- 1883,1897 ----
    ;; Return the boundary of the inserted text (as list of BEG and END).
    (save-excursion
      (let ((begin (point)))
        (let ((dired-actual-switches
  	     (or switches
+ 		 dired-subdir-switches
  		 (dired-replace-in-string "R" "" dired-actual-switches))))
  	(if (equal dirname (car (car (last dired-subdir-alist))))
  	    ;; If doing the top level directory of the buffer,
  	    ;; redo it as specified in dired-directory.
  	    (dired-readin-insert)
  	  (dired-insert-directory dirname dired-actual-switches nil nil t)))
        (list begin (point)))))
  
  (defun dired-insert-subdir-doupdate (dirname elt beg-end)
***************
*** 2007,2016 ****
  Lower levels are unaffected."
    ;; With optional REMEMBER-MARKS, return a mark-alist.
    (interactive)
!   (let ((beg (dired-subdir-min))
! 	(end (dired-subdir-max))
! 	buffer-read-only cur-dir)
!     (setq cur-dir (dired-current-directory))
      (if (equal cur-dir default-directory)
  	(error "Attempt to kill top level directory"))
      (prog1
--- 2034,2045 ----
  Lower levels are unaffected."
    ;; With optional REMEMBER-MARKS, return a mark-alist.
    (interactive)
!   (let* ((beg (dired-subdir-min))
! 	 (end (dired-subdir-max))
! 	 (modflag (buffer-modified-p))
! 	 (cur-dir (dired-current-directory))
! 	 (cons (assoc-string cur-dir dired-switches-alist))
! 	 buffer-read-only)
      (if (equal cur-dir default-directory)
  	(error "Attempt to kill top level directory"))
      (prog1
***************
*** 2018,2024 ****
        (delete-region beg end)
        (if (eobp)			; don't leave final blank line
  	  (delete-char -1))
!       (dired-unsubdir cur-dir))))
  
  (defun dired-unsubdir (dir)
    ;; Remove DIR from the alist
--- 2047,2056 ----
        (delete-region beg end)
        (if (eobp)			; don't leave final blank line
  	  (delete-char -1))
!       (dired-unsubdir cur-dir)
!       (when cons
! 	(setq dired-switches-alist (delete cons dired-switches-alist)))
!       (restore-buffer-modified-p modflag))))
  
  (defun dired-unsubdir (dir)
    ;; Remove DIR from the alist
***************
*** 2077,2095 ****
  Use \\[dired-hide-all] to (un)hide all directories."
    (interactive "p")
    (dired-hide-check)
!   (while (>=  (setq arg (1- arg)) 0)
!     (let* ((cur-dir (dired-current-directory))
! 	   (hidden-p (dired-subdir-hidden-p cur-dir))
! 	   (elt (assoc cur-dir dired-subdir-alist))
! 	   (end-pos (1- (dired-get-subdir-max elt)))
! 	   buffer-read-only)
!       ;; keep header line visible, hide rest
!       (goto-char (dired-get-subdir-min elt))
!       (skip-chars-forward "^\n\r")
!       (if hidden-p
! 	  (subst-char-in-region (point) end-pos ?\r ?\n)
! 	(subst-char-in-region (point) end-pos ?\n ?\r)))
!     (dired-next-subdir 1 t)))
  
  ;;;###autoload
  (defun dired-hide-all (arg)
--- 2109,2129 ----
  Use \\[dired-hide-all] to (un)hide all directories."
    (interactive "p")
    (dired-hide-check)
!   (let ((modflag (buffer-modified-p)))
!     (while (>=  (setq arg (1- arg)) 0)
!       (let* ((cur-dir (dired-current-directory))
! 	     (hidden-p (dired-subdir-hidden-p cur-dir))
! 	     (elt (assoc cur-dir dired-subdir-alist))
! 	     (end-pos (1- (dired-get-subdir-max elt)))
! 	     buffer-read-only)
! 	;; keep header line visible, hide rest
! 	(goto-char (dired-get-subdir-min elt))
! 	(skip-chars-forward "^\n\r")
! 	(if hidden-p
! 	    (subst-char-in-region (point) end-pos ?\r ?\n)
! 	  (subst-char-in-region (point) end-pos ?\n ?\r)))
!       (dired-next-subdir 1 t))
!     (restore-buffer-modified-p modflag)))
  
  ;;;###autoload
  (defun dired-hide-all (arg)
***************
*** 2098,2104 ****
  Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
    (interactive "P")
    (dired-hide-check)
!   (let (buffer-read-only)
      (if (save-excursion
  	  (goto-char (point-min))
  	  (search-forward "\r" nil t))
--- 2132,2139 ----
  Use \\[dired-hide-subdir] to (un)hide a particular subdirectory."
    (interactive "P")
    (dired-hide-check)
!   (let ((modflag (buffer-modified-p))
! 	buffer-read-only)
      (if (save-excursion
  	  (goto-char (point-min))
  	  (search-forward "\r" nil t))
***************
*** 2107,2113 ****
        ;; hide
        (let ((pos (point-max))		; pos of end of last directory
  	    (alist dired-subdir-alist))
! 	(while alist			; while there are dirs before pos
  	  (subst-char-in-region (dired-get-subdir-min (car alist)) ; pos of prev dir
  				(save-excursion
  				  (goto-char pos) ; current dir
--- 2142,2148 ----
        ;; hide
        (let ((pos (point-max))		; pos of end of last directory
  	    (alist dired-subdir-alist))
! 	(while alist		        ; while there are dirs before pos
  	  (subst-char-in-region (dired-get-subdir-min (car alist)) ; pos of prev dir
  				(save-excursion
  				  (goto-char pos) ; current dir
***************
*** 2116,2122 ****
  				  (point))
  				?\n ?\r)
  	  (setq pos (dired-get-subdir-min (car alist)))	; prev dir gets current dir
! 	  (setq alist (cdr alist)))))))
  
  ;;;###end dired-ins.el
  
--- 2151,2158 ----
  				  (point))
  				?\n ?\r)
  	  (setq pos (dired-get-subdir-min (car alist)))	; prev dir gets current dir
! 	  (setq alist (cdr alist)))))
!     (restore-buffer-modified-p modflag)))
  
  ;;;###end dired-ins.el
  
============================================================

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-06-03  3:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-03  3:49 dired-aux.el Luc Teirlinck
  -- strict thread matches above, loose matches on Subject: below --
2004-06-01  3:21 dired-aux.el Luc Teirlinck
2004-06-01  4:03 ` dired-aux.el Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.