aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorGlenn Morris2011-02-19 12:36:54 -0800
committerGlenn Morris2011-02-19 12:36:54 -0800
commitbea584fae3e985332d15a05fd08b3c322a965c75 (patch)
tree2dfa2fb4a6b3c362970b1aa45f8d270f6e1f7412 /lisp
parent615d868ee6add5d37db574d266f0d166c2f16bb8 (diff)
downloademacs-bea584fae3e985332d15a05fd08b3c322a965c75.tar.gz
emacs-bea584fae3e985332d15a05fd08b3c322a965c75.zip
Merge dired-x's dired-find-buffer-nocreate into dired.el.
* lisp/dired-x.el (dired-find-buffer-nocreate): Merge into dired.el. * lisp/dired.el (dired-find-buffer-nocreate): Merge dired-x version. * doc/misc/dired-x.texi (Technical Details): No longer redefines dired-find-buffer-nocreate.
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 @@
22 22
232011-02-19 Glenn Morris <rgm@gnu.org> 232011-02-19 Glenn Morris <rgm@gnu.org>
24 24
25 * dired-x.el (dired-find-buffer-nocreate): Merge into dired.el.
26 * dired.el (dired-find-buffer-nocreate): Merge dired-x version.
27
25 * dired-x.el (dired-read-shell-command): Merge into dired-aux's version. 28 * dired-x.el (dired-read-shell-command): Merge into dired-aux's version.
26 * dired-aux.el (dired-read-shell-command): Merge dired-x's version. 29 * dired-aux.el (dired-read-shell-command): Merge dired-x's version.
27 30
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 @@
42;; ;; (dired-omit-mode 1) 42;; ;; (dired-omit-mode 1)
43;; )) 43;; ))
44;; 44;;
45;; At load time dired-x.el will install itself, redefine some functions, and 45;; At load time dired-x.el will install itself and bind some dired keys.
46;; bind some dired keys. 46;; Some dired.el and dired-aux.el functions have extra features if
47;; dired-x is loaded.
47 48
48;; User customization: M-x customize-group RET dired-x RET. 49;; User customization: M-x customize-group RET dired-x RET.
49 50
50;; When loaded this code redefines dired.el's dired-find-buffer-nocreate.
51
52;; *Please* see the `dired-x' info pages for more details. 51;; *Please* see the `dired-x' info pages for more details.
53 52
54 53
@@ -1306,31 +1305,6 @@ Otherwise obeys the value of `dired-vm-read-only-folders'."
1306 1305
1307;;; MISCELLANEOUS INTERNAL FUNCTIONS. 1306;;; MISCELLANEOUS INTERNAL FUNCTIONS.
1308 1307
1309(declare-function dired-old-find-buffer-nocreate "dired-x")
1310
1311(or (fboundp 'dired-old-find-buffer-nocreate)
1312 (fset 'dired-old-find-buffer-nocreate
1313 (symbol-function 'dired-find-buffer-nocreate)))
1314
1315;; REDEFINE.
1316;; Redefines dired.el's version of `dired-find-buffer-nocreate'
1317(defun dired-find-buffer-nocreate (dirname &optional mode)
1318 (if (and dired-find-subdir
1319 ;; don't try to find a wildcard as a subdirectory
1320 (string-equal dirname (file-name-directory dirname)))
1321 (let* ((cur-buf (current-buffer))
1322 (buffers (nreverse
1323 (dired-buffers-for-dir (expand-file-name dirname))))
1324 (cur-buf-matches (and (memq cur-buf buffers)
1325 ;; wildcards must match, too:
1326 (equal dired-directory dirname))))
1327 ;; We don't want to switch to the same buffer---
1328 (setq buffers (delq cur-buf buffers));;need setq with delq
1329 (or (car (sort buffers #'dired-buffer-more-recently-used-p))
1330 ;; ---unless it's the only possibility:
1331 (and cur-buf-matches cur-buf)))
1332 (dired-old-find-buffer-nocreate dirname mode)))
1333
1334;; This should be a builtin 1308;; This should be a builtin
1335(defun dired-buffer-more-recently-used-p (buffer1 buffer2) 1309(defun dired-buffer-more-recently-used-p (buffer1 buffer2)
1336 "Return t if BUFFER1 is more recently used than BUFFER2. 1310 "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."
847 ;; killed buffer, it is removed from this list. 847 ;; killed buffer, it is removed from this list.
848 "Alist of expanded directories and their associated dired buffers.") 848 "Alist of expanded directories and their associated dired buffers.")
849 849
850(defvar dired-find-subdir)
851
852;; FIXME add a doc-string, and document dired-x extensions.
850(defun dired-find-buffer-nocreate (dirname &optional mode) 853(defun dired-find-buffer-nocreate (dirname &optional mode)
851 ;; This differs from dired-buffers-for-dir in that it does not consider 854 ;; This differs from dired-buffers-for-dir in that it does not consider
852 ;; subdirs of default-directory and searches for the first match only. 855 ;; subdirs of default-directory and searches for the first match only.
853 ;; Also, the major mode must be MODE. 856 ;; Also, the major mode must be MODE.
854 (setq dirname (expand-file-name dirname)) 857 (if (and (featurep 'dired-x)
855 (let (found (blist dired-buffers)) ; was (buffer-list) 858 dired-find-subdir
856 (or mode (setq mode 'dired-mode)) 859 ;; Don't try to find a wildcard as a subdirectory.
857 (while blist 860 (string-equal dirname (file-name-directory dirname)))
858 (if (null (buffer-name (cdr (car blist)))) 861 (let* ((cur-buf (current-buffer))
859 (setq blist (cdr blist)) 862 (buffers (nreverse
860 (with-current-buffer (cdr (car blist)) 863 (dired-buffers-for-dir (expand-file-name dirname))))
861 (if (and (eq major-mode mode) 864 (cur-buf-matches (and (memq cur-buf buffers)
862 dired-directory ;; nil during find-alternate-file 865 ;; Wildcards must match, too:
863 (equal dirname 866 (equal dired-directory dirname))))
864 (expand-file-name 867 ;; We don't want to switch to the same buffer---
865 (if (consp dired-directory) 868 (setq buffers (delq cur-buf buffers))
866 (car dired-directory) 869 (or (car (sort buffers #'dired-buffer-more-recently-used-p))
867 dired-directory)))) 870 ;; ---unless it's the only possibility:
868 (setq found (cdr (car blist)) 871 (and cur-buf-matches cur-buf)))
869 blist nil) 872 ;; No dired-x, or dired-find-subdir nil.
870 (setq blist (cdr blist)))))) 873 (setq dirname (expand-file-name dirname))
871 found)) 874 (let (found (blist dired-buffers)) ; was (buffer-list)
875 (or mode (setq mode 'dired-mode))
876 (while blist
877 (if (null (buffer-name (cdr (car blist))))
878 (setq blist (cdr blist))
879 (with-current-buffer (cdr (car blist))
880 (if (and (eq major-mode mode)
881 dired-directory ;; nil during find-alternate-file
882 (equal dirname
883 (expand-file-name
884 (if (consp dired-directory)
885 (car dired-directory)
886 dired-directory))))
887 (setq found (cdr (car blist))
888 blist nil)
889 (setq blist (cdr blist))))))
890 found)))
872 891
873 892
874;; Read in a new dired buffer 893;; Read in a new dired buffer