我是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?或者有更好的方法来实现这一目标吗?这个问题可能看起来很愚蠢。我希望你们能提供帮助。
答案 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)))