删除重复项以便对文件进行交互式访问(ido)时,在'recentf页面上出现Emacs错误

时间:2011-08-31 04:29:34

标签: emacs elisp emacs23 auctex

代码在下面,但似乎有错误,因为它说启动时无法找到删除重复项功能。任何人都知道如何解决这个问题?有问题的同一页面上有第二个代码。基本上我可以让它工作,但我希望它删除目录名称。如果有重复,我不在乎。此代码发布在此页面上:

http://www.emacswiki.org/emacs/RecentFiles

(defun recentf-interactive-complete ()
"find a file in the recently open file using ido 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=))
 (ido-make-buffer-list-hook
  (lambda ()
    (setq ido-temp-list filename-list)))
 (filename (ido-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 ( (ido-make-buffer-list-hook
         (lambda ()
           (setq ido-temp-list result-list))))
       (ido-read-buffer (format "%d matches:" result-length))))

1 个答案:

答案 0 :(得分:1)

“remove-duplicates”功能位于cl-seq.el文件中,并包含在所有最新版本的Emacs中。它作为“cl”包的一部分加载,因此您只需在Emacs init文件中使用以下行:

(require 'cl)