这是我的问题:
我使用 Emacs 并获得大量一直毫无用处的缓冲区,例如 *Messages* 或 *Completions*。
我想绑定 \C-y 来关闭所有以 * 开头的缓冲区,除了 *shell* (和 *shell* )缓冲区。
为此,我想在 .emacs 文件中添加一些 Emacs-Lisp:
(defun string-prefix s1 s2
(if (> (string-length s1) (string-length s2)) nil
(string=? s1 (substring s2 0 (string-length s1))) ))
(defun curry2
(lambda (f)
(lambda (x)
(lambda (y)
(f x y) ))))
(defun filter
(lambda (f l)
(if (null? l) '()
(let ((rest (cdr l)))
(if (f (car l)) (cons (car l) rest)
rest) ))))
(defun kill-useless (arg)
(interactive "p")
(map 'kill-buffer
(filter
(not ((curry2 string-prefix) "*shell*"))
(list-buffers)
) ))
(global-set-key "\C-y" 'kill-useless)
我已经测试过了string-prefix
and curry2
使用方案和filter
看起来很简单。
可悲的是我无法得到kill-useless
才能正常工作。
It says filter: Invalid function: (curry2 string-prefix)
.
现在,问题是我对 Emacs-Lisp 有点不满意,除了Scheme 之外我并没有真正使用任何 Lisp,并且在Scheme(麻省理工学院)中,这是有效的:
(filter ((curry2 string-prefix?) "*shell") '("*shell*" "*sh22" "eel"))
;Value 5: ("*shell*")
我想要:
- 修复我的代码的方法
- 关于如何以不同方式做到这一点的建议
Thanks!
C-h f kill-matching-buffers
RET
Kill-matching-buffers 是一个交互式编译的 Lisp 函数
`文件.el'。
(杀死匹配缓冲区 REGEXP 和可选的 INTERNAL-TOO)
终止名称与指定 REGEXP 匹配的缓冲区。
可选的第二个参数指示是否也杀死内部缓冲区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)