From cbbc361a1c27aa0a05e8868ac91f9986737708b2 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Mon, 4 Apr 2016 10:22:53 -0300 Subject: [PATCH] [Fix #77] Only reindent if parens are balanced --- aggressive-indent.el | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/aggressive-indent.el b/aggressive-indent.el index 764a33224..0c6183751 100644 --- a/aggressive-indent.el +++ b/aggressive-indent.el @@ -368,10 +368,24 @@ or messages." (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)))) + (defun aggressive-indent--keep-track-of-changes (l r &rest _) "Store the limits (L and R) of each change in the buffer." (when aggressive-indent-mode - (push (list l r) aggressive-indent--changed-list))) + (push (list l r) aggressive-indent--changed-list) + (aggressive-indent--check-parens))) ;;; Minor modes ;;;###autoload @@ -393,11 +407,12 @@ or messages." (memq major-mode '(text-mode fundamental-mode)) buffer-read-only)) (aggressive-indent-mode -1) - ;; Should electric indent be ON or OFF? + ;; Should electric indent be ON or OFF? (if (or (eq aggressive-indent-dont-electric-modes t) (cl-member-if #'derived-mode-p aggressive-indent-dont-electric-modes)) (aggressive-indent--local-electric nil) (aggressive-indent--local-electric t)) + (aggressive-indent--check-parens) (add-hook 'after-change-functions #'aggressive-indent--keep-track-of-changes nil 'local) (add-hook 'post-command-hook #'aggressive-indent--indent-if-changed nil 'local)) ;; Clean the hooks -- 2.39.2