如何使用elisp回答minibuffer中的y or n?

比如关闭一个终端buffer时,会有如下提示出现在minibuffer中:

Buffer "*terminal*" has a running process; kill it? (y or n)

现在想要写一个函数,关掉*terminal* buffer并且回答y给minibuffer。
记得山人的视频中好像提到过一个解决这样问题的方案,昨天找了一大会儿都没找到,求助!

keyboard macro

不清楚你想干嘛,你在说「如何用我说的方法解决某个问题」,而不是「这个问题是什么,我的需求是什么」,相关的概念可以参考:The XY problem

我的问题是 如何使用elisp回答minibuffer中的y or n? 在标题中。 我的需求是 想要写一个函数,关掉terminal buffer并且回答y给minibuffer。 在内容中。

你依旧没有表述清楚你想要的是什么,像下面的表述就比较清楚:

如何直接关闭运行着 Process 的 Buffer 而不经过确认?比如 *terminal*,每次都要输入 yes 比较烦人。

或着更具体:

每次关闭 *terminal* 都要输入 y 确认,能不能直接关闭而不经过确认?

之所以建议你说实际的需求,是因为你以为的解决方法不见得对,且常常会误导其他试图回答问题的人。如果你没听说过 XY 问题概念的话,可以了解下,会对你提问有帮助。

The XY problem is asking about your attempted solution rather than your actual problem

感谢你的建议,看了之后受益不少。
我的问题描述 可能进入到了解决方法细节的层面,而没有问到作为一个问题的关键点所在。

我参考2楼的建议,录制了一段kbd macro,已经解决了这个问题:

(fset 'my/close-buffer-with-auto-prompt
      (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("\355bdy\355wd" 0 "%d")) arg)))

感谢各位。

关闭 Buffer 时运行的 Hook 是 kill-buffer-query-functions,你遇到的是默认的行为,你可以根据你的需求改变这个 Hook。假设你就是想不确认而直接关闭(这可能不是个好主意):

(remove-hook 'kill-buffer-query-functions #'process-kill-buffer-query-function)
2 个赞