Article View: gnu.emacs.bug
Article #87584Re: dired doesn't look for existing buffers
From: Lawrence R. Dodd
Date: Thu, 15 Sep 1994 16:00
Date: Thu, 15 Sep 1994 16:00
378 lines
15793 bytes
15793 bytes
This is due to a bug in dired.el, dired-aux.el, and dired-x.el. I
suggest using these patches to dired.el, dired-aux.el, and
dired-x.el.
---
diff -c dired-aux.el.\~1\~ dired-aux.el
*** dired-aux.el.~1~ Mon Jul 11 18:46:11 1994
--- dired-aux.el Sun Aug 21 12:48:04 1994
***************
*** 707,713 ****
(defun dired-fun-in-all-buffers (directory fun &rest args)
;; In all buffers dired'ing DIRECTORY, run FUN with ARGS.
;; Return list of buffers where FUN succeeded (i.e., returned non-nil).
! (let ((buf-list (dired-buffers-for-dir directory))
(obuf (current-buffer))
buf success-list)
(while buf-list
--- 707,713 ----
(defun dired-fun-in-all-buffers (directory fun &rest args)
;; In all buffers dired'ing DIRECTORY, run FUN with ARGS.
;; Return list of buffers where FUN succeeded (i.e., returned non-nil).
! (let ((buf-list (dired-buffers-for-dir (expand-file-name directory)))
(obuf (current-buffer))
buf success-list)
(while buf-list
***************
*** 891,902 ****
(dired-fun-in-all-buffers from-dir
(function dired-rename-subdir-1) from-dir to-dir)
;; Update visited file name of all affected buffers
! (let ((blist (buffer-list)))
(while blist
(save-excursion
! (set-buffer (car blist))
(if (and buffer-file-name
! (dired-in-this-tree buffer-file-name from-dir))
(let ((modflag (buffer-modified-p))
(to-file (dired-replace-in-string
(concat "^" (regexp-quote from-dir))
--- 891,903 ----
(dired-fun-in-all-buffers from-dir
(function dired-rename-subdir-1) from-dir to-dir)
;; Update visited file name of all affected buffers
! (let ((expanded-from-dir (expand-file-name from-dir))
! (blist (buffer-list)))
(while blist
(save-excursion
! (set-buffer (car blist))
(if (and buffer-file-name
! (dired-in-this-tree buffer-file-name expanded-from-dir))
(let ((modflag (buffer-modified-p))
(to-file (dired-replace-in-string
(concat "^" (regexp-quote from-dir))
***************
*** 909,920 ****
(defun dired-rename-subdir-1 (dir to)
;; Rename DIR to TO in headerlines and dired-subdir-alist, if DIR or
;; one of its subdirectories is expanded in this buffer.
! (let ((alist dired-subdir-alist)
(elt nil))
(while alist
(setq elt (car alist)
alist (cdr alist))
! (if (dired-in-this-tree (car elt) dir)
;; ELT's subdir is affected by the rename
(dired-rename-subdir-2 elt dir to)))
(if (equal dir default-directory)
--- 910,922 ----
(defun dired-rename-subdir-1 (dir to)
;; Rename DIR to TO in headerlines and dired-subdir-alist, if DIR or
;; one of its subdirectories is expanded in this buffer.
! (let ((expanded-dir (expand-file-name dir))
! (alist dired-subdir-alist)
(elt nil))
(while alist
(setq elt (car alist)
alist (cdr alist))
! (if (dired-in-this-tree (car elt) expanded-dir)
;; ELT's subdir is affected by the rename
(dired-rename-subdir-2 elt dir to)))
(if (equal dir default-directory)
***************
*** 1530,1535 ****
--- 1532,1538 ----
;;"Kill all proper subdirs of DIRNAME, excluding DIRNAME itself.
;; With optional arg REMEMBER-MARKS, return an alist of marked files."
(interactive "DKill tree below directory: ")
+ (setq dirname (expand-file-name dirname))
(let ((s-alist dired-subdir-alist) dir m-alist)
(while s-alist
(setq dir (car (car s-alist))
diff -c dired.el.\~1\~ dired.el
*** dired.el.~1~ Sat Aug 6 11:36:26 1994
--- dired.el Sun Aug 21 12:40:44 1994
***************
*** 188,193 ****
--- 188,194 ----
(defvar dired-re-perms "-[-r][-w].[-r][-w].[-r][-w].")
(defvar dired-re-dot "^.* \\.\\.?$")
+ ;; The subdirectory names in this list are expanded.
(defvar dired-subdir-alist nil
"Association list of subdirectories and their buffer positions.
Each subdirectory has an element: (DIRNAME . STARTMARKER).
***************
*** 1250,1286 ****
;; Enlarged by dired-advertise
;; Queried by function dired-buffers-for-dir. When this detects a
;; killed buffer, it is removed from this list.
! "Alist of directories and their associated dired buffers.")
(defun dired-buffers-for-dir (dir)
;; Return a list of buffers that dired DIR (top level or in-situ subdir).
;; The list is in reverse order of buffer creation, most recent last.
;; As a side effect, killed dired buffers for DIR are removed from
;; dired-buffers.
(setq dir (file-name-as-directory dir))
! (let ((alist dired-buffers) result elt)
(while alist
! (setq elt (car alist))
! (if (dired-in-this-tree dir (car elt))
! (let ((buf (cdr elt)))
! (if (buffer-name buf)
! (if (assoc dir (save-excursion
! (set-buffer buf)
! dired-subdir-alist))
! (setq result (cons buf result)))
! ;; else buffer is killed - clean up:
! (setq dired-buffers (delq elt dired-buffers)))))
(setq alist (cdr alist)))
result))
(defun dired-advertise ()
;;"Advertise in variable `dired-buffers' that we dired `default-directory'."
;; With wildcards we actually advertise too much.
! (if (memq (current-buffer) (dired-buffers-for-dir default-directory))
! t ; we have already advertised ourselves
! (setq dired-buffers
! (cons (cons default-directory (current-buffer))
! dired-buffers))))
(defun dired-unadvertise (dir)
;; Remove DIR from the buffer alist in variable dired-buffers.
--- 1251,1291 ----
;; Enlarged by dired-advertise
;; Queried by function dired-buffers-for-dir. When this detects a
;; killed buffer, it is removed from this list.
! "Alist of expanded directories and their associated dired buffers.")
(defun dired-buffers-for-dir (dir)
;; Return a list of buffers that dired DIR (top level or in-situ subdir).
;; The list is in reverse order of buffer creation, most recent last.
;; As a side effect, killed dired buffers for DIR are removed from
;; dired-buffers.
+ ;; For testing. -MDE 8/21/94
+ (if (not (string-equal dir (expand-file-name dir)))
+ (debug))
(setq dir (file-name-as-directory dir))
! (let ((alist dired-buffers) result elt buf)
(while alist
! (setq elt (car alist)
! buf (cdr elt))
! (if (buffer-name buf)
! (if (dired-in-this-tree dir (car elt))
! (if (assoc dir (save-excursion
! (set-buffer buf)
! dired-subdir-alist))
! (setq result (cons buf result))))
! ;; else buffer is killed - clean up:
! (setq dired-buffers (delq elt dired-buffers)))
(setq alist (cdr alist)))
result))
(defun dired-advertise ()
;;"Advertise in variable `dired-buffers' that we dired `default-directory'."
;; With wildcards we actually advertise too much.
! (let ((expanded-default (expand-file-name default-directory)))
! (if (memq (current-buffer) (dired-buffers-for-dir expanded-default))
! t ; we have already advertised ourselves
! (setq dired-buffers
! (cons (cons expanded-default (current-buffer))
! dired-buffers)))))
(defun dired-unadvertise (dir)
;; Remove DIR from the buffer alist in variable dired-buffers.
***************
*** 1288,1294 ****
;; It does not affect buffers in which DIR is a subdir.
;; Removing is also done as a side-effect in dired-buffer-for-dir.
(setq dired-buffers
! (delq (assoc dir dired-buffers) dired-buffers)))
;; Tree Dired
--- 1293,1299 ----
;; It does not affect buffers in which DIR is a subdir.
;; Removing is also done as a side-effect in dired-buffer-for-dir.
(setq dired-buffers
! (delq (assoc (expand-file-name dir) dired-buffers) dired-buffers)))
;; Tree Dired
***************
*** 1296,1303 ****
(defun dired-in-this-tree (file dir)
;;"Is FILE part of the directory tree starting at DIR?"
(let (case-fold-search)
! (string-match (concat "^" (regexp-quote (expand-file-name dir))) file)))
(defun dired-normalize-subdir (dir)
;; Prepend default-directory to DIR if relative path name.
--- 1301,1311 ----
(defun dired-in-this-tree (file dir)
;;"Is FILE part of the directory tree starting at DIR?"
+ ;; For testing. -MDE 8/21/94
+ (if (not (string-equal dir (expand-file-name dir)))
+ (debug))
(let (case-fold-search)
! (string-match (concat "^" (regexp-quote dir)) file)))
(defun dired-normalize-subdir (dir)
;; Prepend default-directory to DIR if relative path name.
diff -c dired-x.el.orig dired-x.el
*** dired-x.el.orig Tue Jun 28 14:38:58 1994
--- dired-x.el Mon Aug 22 09:11:09 1994
***************
*** 3,10 ****
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
;; Lawrence R. Dodd <dodd@roebling.poly.edu>
;; Maintainer: Lawrence R. Dodd <dodd@roebling.poly.edu>
! ;; Version: 2.37
! ;; Date: 1994/06/28 15:53:34
;; Keywords: dired extensions
;; Copyright (C) 1993, 1994 Free Software Foundation
--- 3,10 ----
;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
;; Lawrence R. Dodd <dodd@roebling.poly.edu>
;; Maintainer: Lawrence R. Dodd <dodd@roebling.poly.edu>
! ;; Version: 2.43
! ;; Date: 1994/08/21 21:34:58
;; Keywords: dired extensions
;; Copyright (C) 1993, 1994 Free Software Foundation
***************
*** 301,307 ****
(file-name-nondirectory fn)))
(save-excursion ; you never know where kill-buffer leaves you
(kill-buffer buf))))
! (let ((buf-list (dired-buffers-for-dir fn))
(buf nil))
(and buf-list
(y-or-n-p (format "Kill dired buffer%s of %s, too? "
--- 301,307 ----
(file-name-nondirectory fn)))
(save-excursion ; you never know where kill-buffer leaves you
(kill-buffer buf))))
! (let ((buf-list (dired-buffers-for-dir (expand-file-name fn)))
(buf nil))
(and buf-list
(y-or-n-p (format "Kill dired buffer%s of %s, too? "
***************
*** 575,580 ****
--- 575,581 ----
(interactive "sOmit files (regexp): ")
(if dired-omit-files-p
(let ((omit-re (or regexp (dired-omit-regexp)))
+ (old-modified-p (buffer-modified-p))
count)
(or (string= omit-re "")
(let ((dired-marker-char dired-omit-marker-char))
***************
*** 585,590 ****
--- 586,597 ----
;; Force an update of modeline.
(set-buffer-modified-p (buffer-modified-p)))
(message "(Nothing to omit)"))))
+ ;; Try to preserve modified state of buffer. So `%*' doesn't appear
+ ;; in mode-line of omitted buffers.
+ (set-buffer-modified-p (and old-modified-p
+ (save-excursion
+ (goto-char (point-min))
+ (re-search-forward dired-re-mark nil t))))
count)))
(defun dired-omit-regexp ()
***************
*** 1300,1306 ****
(interactive)
(require 'man)
(let ((file (dired-get-filename))
! (manual-program "nroff -man -h"))
(Man-getpage-in-background file)))
;;; Run Info on files.
--- 1307,1313 ----
(interactive)
(require 'man)
(let ((file (dired-get-filename))
! (manual-program "nroff -man -h"))
(Man-getpage-in-background file)))
;;; Run Info on files.
***************
*** 1357,1363 ****
(defun dired-find-buffer-nocreate (dirname)
(if dired-find-subdir
(let* ((cur-buf (current-buffer))
! (buffers (nreverse (dired-buffers-for-dir dirname)))
(cur-buf-matches (and (memq cur-buf buffers)
;; wildcards must match, too:
(equal dired-directory dirname))))
--- 1364,1371 ----
(defun dired-find-buffer-nocreate (dirname)
(if dired-find-subdir
(let* ((cur-buf (current-buffer))
! (buffers (nreverse
! (dired-buffers-for-dir (expand-file-name dirname))))
(cur-buf-matches (and (memq cur-buf buffers)
;; wildcards must match, too:
(equal dired-directory dirname))))
***************
*** 1381,1411 ****
(setq list (cdr list)))
more-recent)))
- ;;; Same thing as `dired-buffers-for-dir' of dired.el? - lrd 11/23/93
- ;;; (defun dired-buffers-for-dir-exact (dir)
- ;;; ;; Return a list of buffers that dired DIR (a directory or wildcard)
- ;;; ;; at top level, or as subdirectory.
- ;;; ;; Top level matches must match the wildcard part too, if any.
- ;;; ;; The list is in reverse order of buffer creation, most recent last.
- ;;; ;; As a side effect, killed dired buffers for DIR are removed from
- ;;; ;; dired-buffers.
- ;;; (let ((alist dired-buffers) result elt)
- ;;; (while alist
- ;;; (setq elt (car alist)
- ;;; alist (cdr alist))
- ;;; (let ((buf (cdr elt)))
- ;;; (if (buffer-name buf)
- ;;; ;; Top level must match exactly against dired-directory in
- ;;; ;; case one of them is a wildcard.
- ;;; (if (or (equal dir (save-excursion (set-buffer buf)
- ;;; dired-directory))
- ;;; (assoc dir (save-excursion (set-buffer buf)
- ;;; dired-subdir-alist)))
- ;;; (setq result (cons buf result)))
- ;;; ;; else buffer is killed - clean up:
- ;;; (setq dired-buffers (delq elt dired-buffers)))))
- ;;; result))
-
;;; REDEFINE.
;;; Redefines dired.el's version of `dired-initial-position'
(defun dired-initial-position (dirname)
--- 1389,1394 ----
***************
*** 1623,1629 ****
;;; This section is provided for reports. It uses Barry A. Warsaw's
;;; reporter.el which is bundled with GNU Emacs v19.
! (defconst dired-x-version "2.37"
"Revision number of dired-x.el -- dired extra for GNU Emacs v19.
Type \\[dired-x-submit-report] to send a bug report. Available via anonymous
ftp in
--- 1606,1612 ----
;;; This section is provided for reports. It uses Barry A. Warsaw's
;;; reporter.el which is bundled with GNU Emacs v19.
! (defconst dired-x-version "2.43"
"Revision number of dired-x.el -- dired extra for GNU Emacs v19.
Type \\[dired-x-submit-report] to send a bug report. Available via anonymous
ftp in
Technical Details
Message-ID:
<9409151551.AA17203@roebling.poly.edu>Path:
arc1-ca.pugleaf.net!bga.com!news.sprintlink.net!redstone.interpath.net!ddsw1!panix!MathWorks.Com!europa.eng.gtefsd.com!howland.reston.ans.net!math.ohio-state.edu!cis.ohio-state.edu!roebling.poly.edu!doddReferences:
<199409151143.HAA22585@krusty.eecs.umich.edu>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fb2f1,54a2ef4a30b7db48 X-Google-Attributes: gidfb2f1,public X-Google-ArrivalTime: 1994-09-15 15:59:33 PST Path: arc1-ca.pugleaf.net!bga.com!news.sprintlink.net!redstone.interpath.net!ddsw1!panix!MathWorks.Com!europa.eng.gtefsd.com!howland.reston.ans.net!math.ohio-state.edu!cis.ohio-state.edu!roebling.poly.edu!dodd From: dodd@roebling.poly.edu (Lawrence R. Dodd) Newsgroups: gnu.emacs.bug Subject: Re: dired doesn't look for existing buffers Date: 15 Sep 1994 12:00:42 -0400 Organization: GNUs Not Usenet Lines: 383 Sender: daemon@cis.ohio-state.edu Approved: bug-gnu-emacs@prep.ai.mit.edu Distribution: gnu Message-ID: <9409151551.AA17203@roebling.poly.edu> References: <199409151143.HAA22585@krusty.eecs.umich.edu> Reply-To: dodd@roebling.poly.edu