杀死名称以特定字符串开头的缓冲区

2023-11-25

这是我的问题: 我使用 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*")

我想要:

  1. 修复我的代码的方法
  2. 关于如何以不同方式做到这一点的建议

Thanks!


C-h f kill-matching-buffers RET

Kill-matching-buffers 是一个交互式编译的 Lisp 函数 `文件.el'。

(杀死匹配缓冲区 REGEXP 和可选的 INTERNAL-TOO)

终止名称与指定 REGEXP 匹配的缓冲区。 可选的第二个参数指示是否也杀死内部缓冲区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

杀死名称以特定字符串开头的缓冲区 的相关文章

随机推荐