Emacs列出可点击文本中的文件缓冲区

时间:2014-12-08 15:32:15

标签: emacs lambda elisp

我是emacs lisp的新手。今天我想编写一个emacs lisp函数来列出我的开放文件 (这是与文件相关的缓冲区)并使它们可以点击,但我在理解插入按钮功能时会遇到问题。

这是我的代码。

(require 'dash)
(require 'button)
(defun insert-button-for-buffer (buf)
 (insert-button (buffer-name buf)
            'action  (lambda (x) (display-buffer (get-buffer buf)))))
(-map 'insert-button-for-buffer
  (-filter (lambda (buf) (buffer-file-name buf))
           (buffer-list)))

这段代码根本不起作用。我想(display-buffer(get-buffer buf))。 lambda函数中的变量只是没有得到正确的值。我知道Overlay中lambda中的x参数。但是我如何从x变量中获取buffer-name?或者有更好的方法来实现这一目标吗?这个问题可能看起来很愚蠢。我希望你们能提供帮助。

1 个答案:

答案 0 :(得分:2)

你因为好的而堕落了。词汇绑定陷阱。 这是一个修复:

(require 'button)
(defun insert-button-for-buffer (buf)
  (insert-button
   (buffer-name buf)
   'action
   `(lambda (x) (display-buffer ,(get-buffer buf))))
  (insert "\n"))
(mapc #'insert-button-for-buffer
      (cl-remove-if-not
       #'buffer-file-name
       (buffer-list)))