diff --git a/meow-beacon.el b/meow-beacon.el index 684d8f6..871ffff 100644 --- a/meow-beacon.el +++ b/meow-beacon.el @@ -96,31 +96,33 @@ Non-nil BACKWARD means backward direction." (defun meow--beacon-apply-command (cmd) "Apply CMD in BEACON state." - (when meow--beacon-overlays - (let ((bak (overlay-get (car meow--beacon-overlays) - 'meow-beacon-backward))) - (meow--wrap-collapse-undo - (save-mark-and-excursion - (cl-loop for ov in (if bak (reverse meow--beacon-overlays) meow--beacon-overlays) do - (when (and (overlayp ov)) - (let ((type (overlay-get ov 'meow-beacon-type)) - (backward (overlay-get ov 'meow-beacon-backward))) - ;; always switch to normal state before applying kmacro - (meow--switch-state 'normal) - - (if (eq type 'cursor) - (progn - (meow--cancel-selection) - (goto-char (overlay-start ov))) - (thread-first - (if backward - (meow--make-selection - type (overlay-end ov) (overlay-start ov)) - (meow--make-selection type (overlay-start ov) (overlay-end ov))) - (meow--select t))) - - (call-interactively cmd)) - (delete-overlay ov)))))))) + (unwind-protect + (when meow--beacon-overlays + (let ((bak (overlay-get (car meow--beacon-overlays) + 'meow-beacon-backward))) + (meow--wrap-collapse-undo + (save-mark-and-excursion + (cl-loop for ov in (if bak (reverse meow--beacon-overlays) meow--beacon-overlays) do + (when (and (overlayp ov)) + (let ((type (overlay-get ov 'meow-beacon-type)) + (backward (overlay-get ov 'meow-beacon-backward))) + ;; always switch to normal state before applying kmacro + (meow--switch-state 'normal) + + (if (eq type 'cursor) + (progn + (meow--cancel-selection) + (goto-char (overlay-start ov))) + (thread-first + (if backward + (meow--make-selection + type (overlay-end ov) (overlay-start ov)) + (meow--make-selection type (overlay-start ov) (overlay-end ov))) + (meow--select t))) + + (call-interactively cmd)) + (delete-overlay ov))))))) + (setq-local meow--beacon-insert-enter-key nil))) (defun meow--beacon-apply-kmacros-from-insert () "Apply kmacros in BEACON state, after exiting from insert.