emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 951b5e3 4/4: Merge commit 'c7e65ca646a7fff43df94bb5f95d995


From: Artur Malabarba
Subject: [elpa] master 951b5e3 4/4: Merge commit 'c7e65ca646a7fff43df94bb5f95d9953345ef666'
Date: Thu, 18 Jun 2015 12:47:13 +0000

branch: master
commit 951b5e388108af26263a6ab6892391fea976a220
Merge: 61b8c49 c7e65ca
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>

    Merge commit 'c7e65ca646a7fff43df94bb5f95d9953345ef666'
---
 packages/aggressive-indent/README.md            |    2 +-
 packages/aggressive-indent/aggressive-indent.el |   83 ++++++++++++++---------
 2 files changed, 51 insertions(+), 34 deletions(-)

diff --git a/packages/aggressive-indent/README.md 
b/packages/aggressive-indent/README.md
index b5006f5..8873568 100644
--- a/packages/aggressive-indent/README.md
+++ b/packages/aggressive-indent/README.md
@@ -7,7 +7,7 @@ transposing lines, or slurping and barfing sexps, indentation 
is bound
 to go wrong.
 
 **`aggressive-indent-mode`** is a minor mode that keeps your code **always**
-indented. It reindents after every command, making it more reliable
+indented. It reindents after every change, making it more reliable
 than `electric-indent-mode`.
 
 ### Demonstration ###
diff --git a/packages/aggressive-indent/aggressive-indent.el 
b/packages/aggressive-indent/aggressive-indent.el
index 5d91396..989ab51 100644
--- a/packages/aggressive-indent/aggressive-indent.el
+++ b/packages/aggressive-indent/aggressive-indent.el
@@ -4,7 +4,7 @@
 
 ;; Author: Artur Malabarba <address@hidden>
 ;; URL: http://github.com/Malabarba/aggressive-indent-mode
-;; Version: 1.0.2
+;; Version: 1.1
 ;; Package-Requires: ((emacs "24.1") (names "20150125.9") (cl-lib "0.5"))
 ;; Keywords: indent lisp maint tools
 ;; Prefix: aggressive-indent
@@ -18,7 +18,7 @@
 ;; to go wrong.
 ;;
 ;; `aggressive-indent-mode' is a minor mode that keeps your code always
-;; indented.  It reindents after every command, making it more reliable
+;; indented.  It reindents after every change, making it more reliable
 ;; than `electric-indent-mode'.
 ;;
 ;; ### Instructions ###
@@ -217,6 +217,11 @@ change."
   '(when (boundp 'iedit-mode)
      (add-to-list 'aggressive-indent--internal-dont-indent-if
                   'iedit-mode)))
+(eval-after-load 'coq
+  '(add-to-list 'aggressive-indent--internal-dont-indent-if
+                '(and (derived-mode-p 'coq-mode)
+                      (not (string-match "\\.[[:space:]]*$"
+                                         (thing-at-point 'line))))))
 
 (defcustom dont-indent-if '()
   "List of variables and functions to prevent aggressive indenting.
@@ -249,28 +254,34 @@ erroring again."
                   (setq -has-errored t)
                   (message -error-message er))))))
 
+
 :autoload
-(defun indent-defun ()
+(defun indent-defun (&optional l r)
   "Indent current defun.
-Throw an error if parentheses are unbalanced."
+Throw an error if parentheses are unbalanced.
+If L and R are provided, use them for finding the start and end of defun."
   (interactive)
   (let ((p (point-marker)))
     (set-marker-insertion-type p t)
     (indent-region
-     (save-excursion (beginning-of-defun 1) (point))
-     (save-excursion (end-of-defun 1) (point)))
+     (save-excursion
+       (when l (goto-char l))
+       (beginning-of-defun 1) (point))
+     (save-excursion
+       (when r (goto-char r))
+       (end-of-defun 1) (point)))
     (goto-char p)))
 
-(defun -softly-indent-defun ()
+(defun -softly-indent-defun (&optional l r)
   "Indent current defun unobstrusively.
 Like `aggressive-indent-indent-defun', but without errors or
-messages."
+messages.  L and R passed to `aggressive-indent-indent-defun'."
   (unless (or (run-hook-wrapped
                'aggressive-indent--internal-dont-indent-if
                #'eval)
               (aggressive-indent--run-user-hooks))
     (cl-letf (((symbol-function 'message) #'ignore))
-      (ignore-errors (indent-defun)))))
+      (ignore-errors (indent-defun l r)))))
 
 :autoload
 (defun indent-region-and-on (l r)
@@ -298,12 +309,19 @@ until nothing more happens."
             (indent-according-to-mode))
           ;; And then we indent each following line until nothing happens.
           (forward-line 1)
-          (while (and (null (eobp))
-                      (/= (progn (skip-chars-forward "[:blank:]\n")
-                                 (point))
-                          (progn (indent-according-to-mode)
-                                 (point))))
-            (forward-line 1)))
+          (skip-chars-forward "[:blank:]\n")
+          (let* ((eod (ignore-errors
+                        (save-excursion (end-of-defun)
+                                        (point-marker))))
+                 (point-limit (if (and eod (< (point) eod))
+                                  eod (point-max-marker))))
+            (while (and (null (eobp))
+                        (< (point) point-limit)
+                        (/= (point)
+                            (progn (indent-according-to-mode)
+                                   (point))))
+              (forward-line 1)
+              (skip-chars-forward "[:blank:]\n"))))
       (goto-char p))))
 
 (defun -softly-indent-region-and-on (l r &rest _)
@@ -317,26 +335,26 @@ or messages."
     (cl-letf (((symbol-function 'message) #'ignore))
       (ignore-errors (indent-region-and-on l r)))))
 
-(defvar -changed-list-right nil
-  "List of right limit of regions changed in the last command loop.")
-
-(defvar -changed-list-left nil
-  "List of left limit of regions changed in the last command loop.")
+(defvar -changed-list nil
+  "List of (left right) limit of regions changed in the last command loop.")
 
 (defun -indent-if-changed ()
   "Indent any region that changed in the last command loop."
-  (let ((inhibit-modification-hooks t))
-    (when -changed-list-left
-      (-softly-indent-region-and-on
-       (apply #'min -changed-list-left)
-       (apply #'max -changed-list-right))
-      (setq -changed-list-left nil
-            -changed-list-right nil))))
+  (when -changed-list
+    (while-no-input
+      (let ((inhibit-modification-hooks t)
+            (inhibit-point-motion-hooks t)
+            (indent-function
+             (if (cl-member-if #'derived-mode-p modes-to-prefer-defun)
+                 #'-softly-indent-defun
+               #'-softly-indent-region-and-on)))
+        (while -changed-list
+          (apply indent-function (car -changed-list))
+          (setq -changed-list (cdr -changed-list)))))))
 
 (defun -keep-track-of-changes (l r &rest _)
   "Store the limits (L and R) of each change in the buffer."
-  (push l -changed-list-left)
-  (push r -changed-list-right))
+  (push (list l r) -changed-list))
 
 
 ;;; Minor modes
@@ -365,10 +383,9 @@ or messages."
                 (cl-member-if #'derived-mode-p dont-electric-modes))
             (-local-electric nil)
           (-local-electric t))
-        (if (cl-member-if #'derived-mode-p modes-to-prefer-defun)
-            (add-hook 'post-command-hook #'-softly-indent-defun nil 'local)
-          (add-hook 'after-change-functions #'-keep-track-of-changes nil 
'local)
-          (add-hook 'post-command-hook #'-indent-if-changed nil 'local)))
+        (add-hook 'after-change-functions #'-keep-track-of-changes nil 'local)
+        ;; (add-hook 'post-command-hook #'-softly-indent-defun nil 'local)
+        (add-hook 'post-command-hook #'-indent-if-changed nil 'local))
     ;; Clean the hooks
     (remove-hook 'after-change-functions #'-keep-track-of-changes 'local)
     (remove-hook 'post-command-hook #'-indent-if-changed 'local)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]