Ошибка Emacs на странице RecentF при удалении дубликатов для интерактивного доступа к файлам (ido) - PullRequest
0 голосов
/ 31 августа 2011

Код приведен ниже, но, похоже, он содержит ошибку, поскольку при запуске не удается найти функцию удаления дубликатов.У кого-нибудь есть идеи, как это исправить ??На той же странице есть второй код с проблемой.По сути, я могу заставить его работать, но я хочу, чтобы он удалил имена каталогов.Меня не волнует, есть ли дубликаты.Этот код был размещен на этой странице:

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 Ответ

1 голос
/ 31 августа 2011

Функция «remove-duplicates» находится в файле cl-seq.el и включена во все последние версии Emacs. Он загружается как часть пакета "cl", поэтому вам просто нужна следующая строка в вашем файле инициализации Emacs:

(require 'cl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...