- (unless (or (run-hook-wrapped 'aggressive-indent--internal-dont-indent-if #'eval)
- (aggressive-indent--run-user-hooks))
- (while-no-input
- (let ((inhibit-modification-hooks t)
- (inhibit-point-motion-hooks t)
- (indent-function
- (if (cl-member-if #'derived-mode-p aggressive-indent-modes-to-prefer-defun)
- #'aggressive-indent--softly-indent-defun #'aggressive-indent--softly-indent-region-and-on)))
- (while aggressive-indent--changed-list
- (apply indent-function (car aggressive-indent--changed-list))
- (setq aggressive-indent--changed-list
- (cdr aggressive-indent--changed-list))))))))
+ (save-excursion
+ (save-selected-window
+ (unless (or (run-hook-wrapped 'aggressive-indent--internal-dont-indent-if #'eval)
+ (aggressive-indent--run-user-hooks))
+ (while-no-input
+ (redisplay)
+ (let ((inhibit-modification-hooks t)
+ (inhibit-point-motion-hooks t)
+ (indent-function
+ (if (cl-member-if #'derived-mode-p aggressive-indent-modes-to-prefer-defun)
+ #'aggressive-indent--softly-indent-defun #'aggressive-indent--softly-indent-region-and-on)))
+ (while aggressive-indent--changed-list
+ (apply indent-function (car aggressive-indent--changed-list))
+ (setq aggressive-indent--changed-list
+ (cdr aggressive-indent--changed-list))))))))))
+
+(defvar-local aggressive-indent--balanced-parens t
+ "Non-nil if the current-buffer has balanced parens.")
+
+(defun aggressive-indent--check-parens ()
+ "Check if parens are balanced in the current buffer.
+Store result in `aggressive-indent--balanced-parens'."
+ (setq aggressive-indent--balanced-parens
+ (ignore-errors
+ (save-restriction
+ (narrow-to-defun)
+ (check-parens)
+ t))))