]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/smie.el (smie-auto-fill): Don't inf-loop if there's no
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 14 Mar 2013 14:48:03 +0000 (10:48 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 14 Mar 2013 14:48:03 +0000 (10:48 -0400)
token before point.

Fixes: debbugs:13942
lisp/ChangeLog
lisp/emacs-lisp/smie.el

index 993d9789bad7be8984d5876e961e8588823c9f51..71460a3d7a7b0706b58e0f7f89b5886ccae37372 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-14  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emacs-lisp/smie.el (smie-auto-fill): Don't inf-loop if there's no
+       token before point (bug#13942).
+
 2013-03-14  Leo Liu  <sdl.web@gmail.com>
 
        * thingatpt.el (end-of-sexp): Fix bug#13952.  Use syntax-after.
@@ -25,8 +30,8 @@
 
 2013-02-20  Fabián Ezequiel Gallina  <fgallina@cuca>
 
-       * progmodes/python.el (python-info-current-defun): Enhance
-       match-data cluttering prevention.
+       * progmodes/python.el (python-info-current-defun):
+       Enhance match-data cluttering prevention.
 
 2013-02-19  Glenn Morris  <rgm@gnu.org>
 
@@ -40,8 +45,8 @@
 
 2013-02-19  Fabián Ezequiel Gallina  <fgallina@cuca>
 
-       * progmodes/python.el (python-indent-context): Fix
-       python-info-line-ends-backslash-p call.
+       * progmodes/python.el (python-indent-context):
+       Fix python-info-line-ends-backslash-p call.
        (python-info-line-ends-backslash-p)
        (python-info-beginning-of-backslash): Respect line-number
        argument.
        searching for its match.
        (c-invalidate-state-cache-1): Add HERE parameter to function call.
        (c-parse-state-1): Don't narrow here for 'forward strategy,
-       instead passing extra parameter HERE to several functions.  Remove
-       'BOD strategy.
+       instead passing extra parameter HERE to several functions.
+       Remove 'BOD strategy.
 
 2013-02-01  Stefan Monnier  <monnier@iro.umontreal.ca>
 
index eb3fa8f3b09e1b59094544c5d41a9a9e5083adbf..18cc0e811ce5dbbd6b4a25329c35ec5960160872 100644 (file)
@@ -1631,31 +1631,34 @@ to which that point should be aligned, if we were to reindent it.")
 (defun smie-auto-fill ()
   (let ((fc (current-fill-column)))
     (while (and fc (> (current-column) fc))
-      (cond
-       ((not (or (nth 8 (save-excursion
-                          (syntax-ppss (line-beginning-position))))
-                 (nth 8 (syntax-ppss))))
-        (save-excursion
-          (beginning-of-line)
-          (smie-indent-forward-token)
-          (let ((bsf (point))
-                (gain 0)
-                curcol)
-            (while (<= (setq curcol (current-column)) fc)
-              ;; FIXME?  `smie-indent-calculate' can (and often will)
-              ;; return a result that actually depends on the presence/absence
-              ;; of a newline, so the gain computed here may not be accurate,
-              ;; but in practice it seems to works well enough.
-              (let* ((newcol (smie-indent-calculate))
-                     (newgain (- curcol newcol)))
-                (when (> newgain gain)
-                  (setq gain newgain)
-                  (setq bsf (point))))
-              (smie-indent-forward-token))
-            (when (> gain 0)
-              (goto-char bsf)
-              (newline-and-indent)))))
-       (t (do-auto-fill))))))
+      (or (unless (or (nth 8 (save-excursion
+                               (syntax-ppss (line-beginning-position))))
+                      (nth 8 (syntax-ppss)))
+            (save-excursion
+              (let ((end (point))
+                    (bsf (progn (beginning-of-line)
+                                (smie-indent-forward-token)
+                                (point)))
+                    (gain 0)
+                    curcol)
+                (while (and (<= (point) end)
+                            (<= (setq curcol (current-column)) fc))
+                  ;; FIXME?  `smie-indent-calculate' can (and often will)
+                  ;; return a result that actually depends on the
+                  ;; presence/absence of a newline, so the gain computed here
+                  ;; may not be accurate, but in practice it seems to works
+                  ;; well enough.
+                  (let* ((newcol (smie-indent-calculate))
+                         (newgain (- curcol newcol)))
+                    (when (> newgain gain)
+                      (setq gain newgain)
+                      (setq bsf (point))))
+                  (smie-indent-forward-token))
+                (when (> gain 0)
+                  (goto-char bsf)
+                  (newline-and-indent)
+                  'done))))
+          (do-auto-fill)))))
 
 
 (defun smie-setup (grammar rules-function &rest keywords)