Respuestas:
Por cierto, una opción alternativa puede ser algo como:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
La ventaja es que evita atrapar y volver a lanzar el error, lo que significa, por ejemplo, que el depurador le mostrará la traza inversa correcta (la que corresponde a la fuente real del error, en lugar de la que corresponde a que usted vuelva a lanzar el error de otra persona) )
Otra diferencia es que cleanupse llamará no solo en caso de error, sino también si el código se interrumpe por una C-go una llamada a throw.
quitno tiene errorentre sus padres). IOW con el que también puedes atraparlo, condition-casepero para eso debes llevarlo quitbien error. Por supuesto, eso todavía no manejará el caso de "lanzamiento".
Estas buscando signal:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal, pero su prototipo (signal ERROR-SYMBOL DATA)no lo es (signal ERROR).
cary cdr. Respuesta actualizada
condition-caseatraparkeyboard-quit?