changeset 110464:27917ce150c1

* lisp/emacs-lisp/smie.el (smie-debug--describe-cycle): Fix typo. (smie-indent-comment): Be more careful with comment-start-skip. (smie-indent-comment-close, smie-indent-comment-inside): New funs. (smie-indent-functions): Use them.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 21 Sep 2010 23:18:08 +0200
parents 3132ab826fc5
children b7b7e970d807
files lisp/ChangeLog lisp/emacs-lisp/smie.el
diffstat 2 files changed, 31 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Sep 21 21:33:59 2010 +0200
+++ b/lisp/ChangeLog	Tue Sep 21 23:18:08 2010 +0200
@@ -1,3 +1,10 @@
+2010-09-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* emacs-lisp/smie.el (smie-debug--describe-cycle): Fix typo.
+	(smie-indent-comment): Be more careful with comment-start-skip.
+	(smie-indent-comment-close, smie-indent-comment-inside): New funs.
+	(smie-indent-functions): Use them.
+
 2010-09-21  Michael Albinus  <michael.albinus@gmx.de>
 
 	* net/ange-ftp.el (ange-ftp-skip-msgs): Add "^504 ..." message.
--- a/lisp/emacs-lisp/smie.el	Tue Sep 21 21:33:59 2010 +0200
+++ b/lisp/emacs-lisp/smie.el	Tue Sep 21 23:18:08 2010 +0200
@@ -338,7 +338,7 @@
                      res))
                  cycle)))
     (mapconcat
-     (lambda (elems) (mapconcat 'indentity elems "="))
+     (lambda (elems) (mapconcat 'identity elems "="))
      (append names (list (car names)))
      " < ")))
 
@@ -1173,7 +1173,11 @@
   ;; front of a comment" when doing virtual-indentation anyway.  And if we are
   ;; (as can happen in octave-mode), moving forward can lead to inf-loops.
   (and (smie-indent--bolp)
-       (looking-at comment-start-skip)
+       (let ((pos (point)))
+         (save-excursion
+           (beginning-of-line)
+           (and (re-search-forward comment-start-skip (line-end-position) t)
+                (eq pos (or (match-end 1) (match-beginning 0))))))
        (save-excursion
          (forward-comment (point-max))
          (skip-chars-forward " \t\r\n")
@@ -1194,6 +1198,20 @@
                (if (looking-at (regexp-quote continue))
                    (current-column))))))))
 
+(defun smie-indent-comment-close ()
+  (and (boundp 'comment-end-skip)
+       comment-end-skip
+       (not (looking-at " \t*$"))       ;Not just a \n comment-closer.
+       (looking-at comment-end-skip)
+       (nth 4 (syntax-ppss))
+       (save-excursion
+         (goto-char (nth 8 (syntax-ppss)))
+         (current-column))))
+
+(defun smie-indent-comment-inside ()
+  (and (nth 4 (syntax-ppss))
+       'noindent))
+
 (defun smie-indent-after-keyword ()
   ;; Indentation right after a special keyword.
   (save-excursion
@@ -1275,9 +1293,10 @@
            (current-column)))))))
 
 (defvar smie-indent-functions
-  '(smie-indent-fixindent smie-indent-bob smie-indent-close smie-indent-comment
-   smie-indent-comment-continue smie-indent-keyword smie-indent-after-keyword
-   smie-indent-exps)
+  '(smie-indent-fixindent smie-indent-bob smie-indent-close
+    smie-indent-comment smie-indent-comment-continue smie-indent-comment-close
+    smie-indent-comment-inside smie-indent-keyword smie-indent-after-keyword
+    smie-indent-exps)
   "Functions to compute the indentation.
 Each function is called with no argument, shouldn't move point, and should
 return either nil if it has no opinion, or an integer representing the column