diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2021-11-28 23:38:02 +0100 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2021-11-28 23:38:29 +0100 |
| commit | b3e2850fcfe63d06f8e00ba985d964a4ba6e3935 (patch) | |
| tree | d589d5d342d6f726215d841e6a98892bc93d6ef0 | |
| parent | b8776afc9fe7897f732f0e9d54268060364481e4 (diff) | |
Add unwind-protect
| -rw-r--r-- | cape.el | 30 |
1 files changed, 16 insertions, 14 deletions
@@ -744,20 +744,22 @@ If INTERACTIVE is nil the function acts like a capf." (`(:async . ,future) (let ((res 'cape--waiting) (start (time-to-seconds))) - (funcall future (lambda (arg) - (when (eq res 'cape--waiting) - (push 'cape--event unread-command-events)) - (setq res arg))) - ;; Force synchronization. - (while (eq res 'cape--waiting) - ;; When we've got input, interrupt the computation. - (when (and unread-command-events toi) - (throw toi nil)) - (when (> (- (time-to-seconds) start) cape-company-timeout) - (error "Cape company backend async timeout")) - (sit-for 0.1 'noredisplay)) - ;; Remove cape--events introduced by future callback - (setq unread-command-events (delq 'cape--event unread-command-events)) + (unwind-protect + (progn + (funcall future (lambda (arg) + (when (eq res 'cape--waiting) + (push 'cape--event unread-command-events)) + (setq res arg))) + ;; Force synchronization. + (while (eq res 'cape--waiting) + ;; When we've got input, interrupt the computation. + (when (and unread-command-events toi) + (throw toi nil)) + (when (> (- (time-to-seconds) start) cape-company-timeout) + (error "Cape company backend async timeout")) + (sit-for 0.1 'noredisplay))) + ;; Remove cape--events introduced by future callback + (setq unread-command-events (delq 'cape--event unread-command-events))) res)) (res res)))) |
