summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2010-08-30 17:21:14 +0200
committerStefan Monnier <monnier@iro.umontreal.ca>2010-08-30 17:21:14 +0200
commitee992a8cede0a4f2fca21b882772a2cc940dc2ff (patch)
tree4f4d35eed0b2649bb14aa2a70aae231a2a3d43ac /lisp/emacs-lisp
parentd36b74ca27f877023620d33ca05f2b5b2ccb05cd (diff)
downloademacs-ee992a8cede0a4f2fca21b882772a2cc940dc2ff.tar.gz
emacs-ee992a8cede0a4f2fca21b882772a2cc940dc2ff.tar.bz2
emacs-ee992a8cede0a4f2fca21b882772a2cc940dc2ff.zip
* lisp/emacs-lisp/smie.el (smie-indent-offset-rule): Let :parent take
a list of parents. (smie-indent-column): Allow indirection through variables.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/smie.el15
1 files changed, 10 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 2fbf0628dbe..c9876c55014 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -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