Mercurial > emacs
diff lisp/emacs-lisp/lisp-mode.el @ 90787:91bf6e05918b
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 662-669)
- Update from CVS
- Fix read-only prompt problem in isearch
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 207-208)
- Merge from emacs--devo--0
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-184
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 18 Mar 2007 14:11:08 +0000 |
parents | dd7c098af727 b72eb510e3d7 |
children | 4ef881a120fe |
line wrap: on
line diff
--- a/lisp/emacs-lisp/lisp-mode.el Sun Mar 18 14:00:43 2007 +0000 +++ b/lisp/emacs-lisp/lisp-mode.el Sun Mar 18 14:11:08 2007 +0000 @@ -909,34 +909,47 @@ (cond ((elt state 3) ;; Inside a string, don't change indentation. nil) - ((save-excursion - ;; test whether current line begins with a constant - (goto-char indent-point) - (skip-chars-forward " \t") - (looking-at ":")) - (let ((desired-indent - (save-excursion - (goto-char (1+ containing-sexp)) - (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) - (point))) - (parse-sexp-ignore-comments t)) - ;; Align a constant symbol under the last constant symbol - (goto-char calculate-lisp-indent-last-sexp) - (while (> (point) desired-indent) - (if (looking-at ":") - (setq desired-indent (point)) - (backward-sexp 1)))) - (current-column)) ((and (integerp lisp-indent-offset) containing-sexp) ;; Indent by constant offset (goto-char containing-sexp) (+ (current-column) lisp-indent-offset)) + ;; in this case calculate-lisp-indent-last-sexp is not nil + (calculate-lisp-indent-last-sexp + (or + ;; try to align the parameters of a known function + (and lisp-indent-function + (not retry) + (funcall lisp-indent-function indent-point state)) + ;; If the function has no special alignment + ;; or it does not apply to this argument, + ;; try to align a constant-symbol under the last + ;; preceding constant symbol, if there is such one of + ;; the last 2 preceding symbols, in the previous + ;; uncommented line. + (and (save-excursion + (goto-char indent-point) + (skip-chars-forward " \t") + (looking-at ":")) + (> calculate-lisp-indent-last-sexp + (save-excursion + (goto-char (1+ containing-sexp)) + (parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t) + (point))) + (let ((parse-sexp-ignore-comments t) + indent) + (goto-char calculate-lisp-indent-last-sexp) + (or (and (looking-at ":") + (setq indent (current-column))) + (and (< (save-excursion (beginning-of-line) (point)) + (prog2 (backward-sexp) (point))) + (looking-at ":") + (setq indent (current-column)))) + indent)) + ;; another symbols or constants not preceded by a constant + ;; as defined above. + normal-indent)) + ;; in this case calculate-lisp-indent-last-sexp is nil (desired-indent) - ((and (boundp 'lisp-indent-function) - lisp-indent-function - (not retry)) - (or (funcall lisp-indent-function indent-point state) - normal-indent)) (t normal-indent))))))