我一直无法和minibuffer-exit-hook
一起玩read-string
。据我所知,完成以后,我不应该再进入minibuffer了read-string
。但是,条件(minibufferp)
表明即使read-string
完成,我仍在迷你缓冲区中。read-string
是用C语言编写的,因此无法在其中添加钩子(即,在read-string
函数的末尾)。
“文档[minibuffer-exit-hook]:从minibuffer退出后,普通钩子就会运行。
[对此进行了更多思考之后,我很确定这是一个错误-因此我提交了一个错误报告:bug#16524。随着我了解更多,我将更新此线程。
(defun test ()
(interactive)
(read-string "Prompt: " "testing"))
(add-hook 'minibuffer-exit-hook (lambda ()
(cond
((minibufferp)
(message "Focus is still in the minibuffer: %s" (buffer-name)))
(t (message "Contragulations -- focus is now in: %s." (buffer-name))))))
在真正退出迷你缓冲区之后运行钩子是毫无意义的:您可以在任何类型的缓冲区中(因为可以从任何地方触发迷你缓冲区的使用),因此您对当前上下文了解得很少(除非您使用本地缓冲区退出) -钩,我猜)。
如果要在选定窗口更改时运行钩子,那么最好的选择是使用apost-command-hook
将当前选定窗口存储在辅助变量中,并使用它与先前的选定窗口进行比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句