All pastes #406264 Raw Edit

recentf + iswitchb

public text v1 · immutable
·published 2007-03-22 08:22 UTC
rendered paste body
(require 'recentf)
(recentf-mode 1)
(defun recentf-iswitchb-complete ()
  "find a file in the recently open file using iswitcb for completion"
  (interactive)
  (let* ((all-files recentf-list)
         (file-assoc-list (mapcar (lambda (x) (cons (file-name-nondirectory x) x)) all-files))
         (filename-list (remove-duplicates (mapcar 'car file-assoc-list) :test 'string=))
         (iswitchb-make-buflist-hook
          (lambda ()
            (setq iswitchb-temp-buflist filename-list)))
         (filename (iswitchb-read-buffer "Find Recent File: "))
         (result-list (delq nil (mapcar (lambda (x) (if (string= (car x) filename) (cdr x))) file-assoc-list)))
         (result-length (length result-list)))
         (find-file 
          (cond 
           ((= result-length 0) filename)
           ((= result-length 1) (car result-list))
           ( t
             (let ( (iswitchb-make-buffer-list-hook
                     (lambda ()
                       (setq iswitchb-temp-buflist result-list))))
               (iswitchb-read-buffer (format "%d matches:" result-length))))))))
(global-set-key (kbd "C-x C-r") 'recentf-iswitchb-complete)