condition-case
и unwind-protect
полезны здесь. condition-case
позволяет вам "ловить" "исключения", одним из которых является выход:
(condition-case
(while t) ; never terminates
(quit (message "C-g was pressed")))
Вы также можете отлавливать другие ошибки, например «error».
unwind-protect
похоже наконец; он выполнит «формы тела», а затем «раскрутит формы». Однако «формы раскручивания» выполняются независимо от того, успешно ли выполнялись «формы тела»:
(unwind-protect
(while t)
(message "Done with infinite loop"))
Вы хотите unwind-protect
в вашем случае.