Как убить минибуфер после периода бездействия?
Я обычно сталкиваюсь с ситуацией, когда я ввожу команду минибуфера, например, открыть файл или изменить буфер, и вместо того, чтобы выполнить ее в минибуфере, я начинаю делать что-то еще, обычно редактируя буфер. Я хотел бы, чтобы минибуфер просто забыл команду, если она не была выполнена после некоторого периода бездействия в минибуфере. Является ли это возможным?
Если бы было возможно заставить минибуфер просто промыть себя после потери фокуса, это было бы также здорово. Теперь я часто получаю очередь команд минибуфера, которые ждут меня, и это чертовски раздражает, поскольку, когда я их Cg, emacs меняет буферы в кадрах.
1 ответ
Я бы не советовал делать что-либо подобное, но вместо этого предложил бы, чтобы вы предоставили визуальную подсказку себе, когда минибуфер активен. Но так как вы просили об этом...
Вы можете поставить функцию для выхода из минибуфера на подходящий крючок или в таймер. Функция может проверить значение (active-minibuffer-window)
и позвоните, скажем, (top-level)
чтобы вернуться на верхний уровень, когда это nil
, (Функция abort-recursive-edit
выйдет из текущего минибуфера, но он может вернуться к родительскому (более мелкому) минибуферу, не обязательно "верхнего уровня".
Какой крючок или таймер использовать? Вы можете использовать `post-command-hook ', который запускается после каждой команды (например, при каждом нажатии клавиши). Это, возможно, излишне, но оно не упустит шанс. Возможно, есть еще один, более подходящий крючок; Не знаю.
Вы можете использовать таймер простоя, который включается только после того, как Emacs простаивает в течение указанного времени. Или вы можете использовать обычный таймер, просто периодически проверяя. Таймер может быть запущен на minibuffer-setup-hook
а затем отменил на minibuffer-exit-hook
,