summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/dired-x.el32
-rw-r--r--lisp/dired.el55
3 files changed, 43 insertions, 47 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 840f96bfcf1..16f1c7dbe5e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -22,6 +22,9 @@
2011-02-19 Glenn Morris <rgm@gnu.org>
+ * dired-x.el (dired-find-buffer-nocreate): Merge into dired.el.
+ * dired.el (dired-find-buffer-nocreate): Merge dired-x version.
+
* dired-x.el (dired-read-shell-command): Merge into dired-aux's version.
* dired-aux.el (dired-read-shell-command): Merge dired-x's version.
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index 042fbe0b085..ff051f65fe9 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -42,13 +42,12 @@
;; ;; (dired-omit-mode 1)
;; ))
;;
-;; At load time dired-x.el will install itself, redefine some functions, and
-;; bind some dired keys.
+;; At load time dired-x.el will install itself and bind some dired keys.
+;; Some dired.el and dired-aux.el functions have extra features if
+;; dired-x is loaded.
;; User customization: M-x customize-group RET dired-x RET.
-;; When loaded this code redefines dired.el's dired-find-buffer-nocreate.
-
;; *Please* see the `dired-x' info pages for more details.
@@ -1306,31 +1305,6 @@ Otherwise obeys the value of `dired-vm-read-only-folders'."
;;; MISCELLANEOUS INTERNAL FUNCTIONS.
-(declare-function dired-old-find-buffer-nocreate "dired-x")
-
-(or (fboundp 'dired-old-find-buffer-nocreate)
- (fset 'dired-old-find-buffer-nocreate
- (symbol-function 'dired-find-buffer-nocreate)))
-
-;; REDEFINE.
-;; Redefines dired.el's version of `dired-find-buffer-nocreate'
-(defun dired-find-buffer-nocreate (dirname &optional mode)
- (if (and dired-find-subdir
- ;; don't try to find a wildcard as a subdirectory
- (string-equal dirname (file-name-directory dirname)))
- (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))))
- ;; We don't want to switch to the same buffer---
- (setq buffers (delq cur-buf buffers));;need setq with delq
- (or (car (sort buffers #'dired-buffer-more-recently-used-p))
- ;; ---unless it's the only possibility:
- (and cur-buf-matches cur-buf)))
- (dired-old-find-buffer-nocreate dirname mode)))
-
;; This should be a builtin
(defun dired-buffer-more-recently-used-p (buffer1 buffer2)
"Return t if BUFFER1 is more recently used than BUFFER2.
diff --git a/lisp/dired.el b/lisp/dired.el
index c5174561faf..1834fe3eeb3 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -847,28 +847,47 @@ periodically reverts at specified time intervals."
;; killed buffer, it is removed from this list.
"Alist of expanded directories and their associated dired buffers.")
+(defvar dired-find-subdir)
+
+;; FIXME add a doc-string, and document dired-x extensions.
(defun dired-find-buffer-nocreate (dirname &optional mode)
;; This differs from dired-buffers-for-dir in that it does not consider
;; subdirs of default-directory and searches for the first match only.
;; Also, the major mode must be MODE.
- (setq dirname (expand-file-name dirname))
- (let (found (blist dired-buffers)) ; was (buffer-list)
- (or mode (setq mode 'dired-mode))
- (while blist
- (if (null (buffer-name (cdr (car blist))))
- (setq blist (cdr blist))
- (with-current-buffer (cdr (car blist))
- (if (and (eq major-mode mode)
- dired-directory ;; nil during find-alternate-file
- (equal dirname
- (expand-file-name
- (if (consp dired-directory)
- (car dired-directory)
- dired-directory))))
- (setq found (cdr (car blist))
- blist nil)
- (setq blist (cdr blist))))))
- found))
+ (if (and (featurep 'dired-x)
+ dired-find-subdir
+ ;; Don't try to find a wildcard as a subdirectory.
+ (string-equal dirname (file-name-directory dirname)))
+ (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))))
+ ;; We don't want to switch to the same buffer---
+ (setq buffers (delq cur-buf buffers))
+ (or (car (sort buffers #'dired-buffer-more-recently-used-p))
+ ;; ---unless it's the only possibility:
+ (and cur-buf-matches cur-buf)))
+ ;; No dired-x, or dired-find-subdir nil.
+ (setq dirname (expand-file-name dirname))
+ (let (found (blist dired-buffers)) ; was (buffer-list)
+ (or mode (setq mode 'dired-mode))
+ (while blist
+ (if (null (buffer-name (cdr (car blist))))
+ (setq blist (cdr blist))
+ (with-current-buffer (cdr (car blist))
+ (if (and (eq major-mode mode)
+ dired-directory ;; nil during find-alternate-file
+ (equal dirname
+ (expand-file-name
+ (if (consp dired-directory)
+ (car dired-directory)
+ dired-directory))))
+ (setq found (cdr (car blist))
+ blist nil)
+ (setq blist (cdr blist))))))
+ found)))
;; Read in a new dired buffer