Respostas:
BTW, uma opção alternativa pode ser algo como:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
A vantagem é que você evita capturar e repetir o erro, o que significa, por exemplo, que o depurador mostrará o backtrace correto (aquele que corresponde à fonte real do erro, em vez daquele que corresponde a você repetir o erro de outra pessoa) )
Outra diferença é que cleanupserá chamado não apenas por erro, mas também se o código for interrompido por uma C-gou uma chamada para throw.
quitnão tem errorentre seus pais). IOW você van também pegá-lo, condition-casemas para isso você precisa colocar quitjunto error. Obviamente, isso ainda não vai lidar com o caso 'throw'.
Você está procurando signal:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal, mas seu protótipo (signal ERROR-SYMBOL DATA)não é (signal ERROR).
care cdr. Resposta atualizada.
condition-casepegariakeyboard-quit?