>From 8ed6d4f903efcab1d915ec67bb907bd9bb4f2c09 Mon Sep 17 00:00:00 2001 From: Leo Date: Wed, 14 Apr 2010 18:58:18 +0100 Subject: [PATCH 2/3] Use parent directory for files with same base name --- lisp/ido.el | 24 +++++++++++++++++++++++- 1 files changed, 23 insertions(+), 1 deletions(-) diff --git a/lisp/ido.el b/lisp/ido.el index 704bf22..92d2a09 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -3410,6 +3410,21 @@ for first matching file." (run-hooks 'ido-make-buffer-list-hook) ido-temp-list)) +(defun ido-find-duplicate-basenames (files) + "Find all the duplicate base names in FILES." + (let ((names (mapcar 'file-name-nondirectory files)) + dups head dup-p) + (setq names (sort names 'string<)) + (while names + (setq head (pop names)) + (while (string= head (car names)) + (pop names) + (setq dup-p t)) + (when dup-p + (push head dups) + (setq dup-p nil))) + dups)) + (defun ido-add-virtual-buffers-to-list () "Add recently visited files, and bookmark files, to the buffer list. This is to make them appear as if they were \"virtual buffers\"." @@ -3418,10 +3433,17 @@ This is to make them appear as if they were \"virtual buffers\"." ;; the file which the user might thought was still open. (unless recentf-mode (recentf-mode 1)) (setq ido-virtual-buffers nil) - (let (name) + (let ((dups (ido-find-duplicate-basenames recentf-list)) + name dir) (dolist (head recentf-list) (and (setq name (file-name-nondirectory head)) (null (get-file-buffer head)) + (if (not (member name dups)) + t + (setq dir head) + (dotimes (__ 2) + (setq dir (directory-file-name (file-name-directory dir)))) + (setq name (file-relative-name head dir))) (not (assoc name ido-virtual-buffers)) (not (member name ido-temp-list)) (not (ido-ignore-item-p name ido-ignore-buffers)) -- 1.7.0.4