]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/smie.el (smie-indent-offset-rule): Let :parent take
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 30 Aug 2010 15:21:14 +0000 (17:21 +0200)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 30 Aug 2010 15:21:14 +0000 (17:21 +0200)
a list of parents.
(smie-indent-column): Allow indirection through variables.

lisp/ChangeLog
lisp/emacs-lisp/smie.el

index ab0b9744048687ac7a16ac5d3fca0ff4fec3c94b..69b11bd7a9a93437a034e6f488304090c5903590 100644 (file)
@@ -1,5 +1,9 @@
 2010-08-30  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * emacs-lisp/smie.el (smie-indent-offset-rule): Let :parent take
+       a list of parents.
+       (smie-indent-column): Allow indirection through variables.
+
        * composite.el (save-buffer-state): Delete, unused.
        * font-lock.el (save-buffer-state): Use with-silent-modifications.
        (font-lock-default-fontify-region): Use with-syntax-table.
index 2fbf0628dbe90bda1b74f69104a0637da43f8eed..c9876c55014b64e61f25d1cd7f3ff2f77e91bf4f 100644 (file)
@@ -593,20 +593,21 @@ OFFSET-RULES is a list of elements which can each either be:
 \(:bolp . OFFSET-RULES)                If TOK is first on a line, use OFFSET-RULES.
 OFFSET                         the offset to use.
 
-PARENT can be either the name of the parent or `open' to mean any parent
-which acts as an open-paren (i.e. has a nil left-precedence).
+PARENT can be either the name of the parent or a list of such names.
 
 OFFSET can be of the form:
 `point'                                align with the token.
 `parent'                               align with the parent.
 NUMBER                         offset by NUMBER.
 \(+ OFFSETS...)                        use the sum of OFFSETS.
+VARIABLE                       use the value of VARIABLE as offset.
 
 The precise meaning of `point' depends on various details: it can
 either mean the position of the token we're indenting, or the
 position of its parent, or the position right after its parent.
 
-A nil offset for indentation after a token defaults to `smie-indent-basic'.")
+A nil offset for indentation after an opening token defaults
+to `smie-indent-basic'.")
 
 (defun smie-indent-hanging-p ()
   ;; A hanging keyword is one that's at the end of a line except it's not at
@@ -674,8 +675,9 @@ PARENT if non-nil should be the parent info returned by `smie-backward-sexp'."
             (save-excursion
               (if after (goto-char after))
               (setq parent (smie-backward-sexp 'halfsexp))))
-          (when (or (equal (nth 2 parent) (cadr rule))
-                    (and (eq (cadr rule) 'open) (null (car parent))))
+          (when (if (listp (cadr rule))
+                    (member (nth 2 parent) (cadr rule))
+                  (equal (nth 2 parent) (cadr rule)))
             (setq rules (cddr rule))))
          (t (error "Unknown rule %s for indentation of %s"
                    rule (car tokinfo))))))
@@ -726,6 +728,8 @@ If VIRTUAL-POINT is non-nil, then `point' is virtual."
     (if (consp parent) (goto-char (cadr parent)))
     (smie-indent-virtual))
    ((eq offset nil) nil)
+   ((and (symbolp offset) (boundp 'offset))
+    (smie-indent-column (symbol-value offset) base parent virtual-point))
    (t (error "Unknown indentation offset %s" offset))))
 
 (defun smie-indent-forward-token ()
@@ -1016,6 +1020,7 @@ in order to figure out the indentation of some other (further down) point."
        (positions
         ;; We're the first arg.
         (goto-char (car positions))
+        ;; FIXME: Use smie-indent-column.
         (+ (smie-indent-offset 'args)
            ;; We used to use (smie-indent-virtual), but that
            ;; doesn't seem right since it might then indent args less than