0

我有一个最近关闭的表单文件的关联列表(buffer-name) . (buffer-file-name),如下所示:

(("04_-_Emacs.rst" . "/home/boris/pst/wordy/edu/HotKeyPoetry/04_-_Emacs.rst")
 ("lib_bk_files_dirs.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_files_dirs.py")
 ("lib_bk_text_related.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_text_related.py")
 ("lib_bk_media.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_media.py")
 nil)

我想获取给定键的值:

(defun ergo-undo-close ()
  (interactive)
  (let ((mylist 
         ;; let's get the keys (buffer names):
         ;; butlast for the last element of this alist is nil
         (butlast (mapcar 'car recently-closed-buffers)))
        baseName
        fileName)
    ;; now let's choose the item to resurrect:
    (setq baseName (ido-completing-read "Open this session closed buffer: " mylist))
    (message baseName) ;; works fine
    ;; and find it's full path:
    (setq fileName (assoc baseName mylist)) ;; <- **Edit**: recently-closed-buffers 
                                            ;; should be here instead of mylist
    (print fileName)
    ;; prints nil -- I expected it to print the pair:
    ;; (find-file (cdr fileName))
    ))

编辑

根据下面的答案,这就是我现在使用的:

(defun ergo-undo-close-buffer ()
  "Opens some this-session closed buffer."
  (interactive)
  (let* ((mylist (delq nil (delete-dups (mapcar 'car recently-closed-buffers))))
         (baseName (ido-completing-read "Open this session closed buffer: " mylist))
         (fileName (cdr (assoc baseName recently-closed-buffers))))
    (find-file fileName)))
4

2 回答 2

2

你想使用(assoc baseName recently-closed-buffers)since mylistis not alist。顺便说一句,我还建议您尝试在 中为变量赋值,let而不是在之后使用setq. 例如:

(let* ((mylist 
        ;; let's get the keys (buffer names):
        ;; butlast for the last element of this alist is nil
        (butlast (mapcar 'car recently-closed-buffers)))
       (baseName (ido-completing-read "Open this session closed buffer: " mylist))
       (fileName (cdr (assoc baseName recently-closed-buffers))))
  (print fileName))
于 2012-09-08T23:26:35.463 回答
1
(cdr (assoc "04_-_Emacs.rst"
            '(("04_-_Emacs.rst" . "/home/boris/pst/wordy/edu/HotKeyPoetry/04_-_Emacs.rst")
              ("lib_bk_files_dirs.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_files_dirs.py")
              ("lib_bk_text_related.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_text_related.py")
              ("lib_bk_media.py" . "/home/boris/cmp/devs/bk_automates/bk_libs/lib_bk_media.py")
              nil)))
于 2012-09-08T11:02:44.497 回答