[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Indentation of constants in LISP
From: |
A Soare |
Subject: |
Re: Indentation of constants in LISP |
Date: |
Thu, 22 Feb 2007 03:24:29 +0100 (CET) |
> If you look closely before trying to atack my code, this always happened .
>
> Is that a bug in Emacs?
C'est pas du tout un bug en Emacs, sinon il s'etait fait faire connaitre sans
doute par quelqu'un depuis longtemps.
There are simply different definitions. Maybe there was 2 persons: one wrote
the indentation for a region, and the other for a line.
The indentation for a region uses from time to time the function which
calculates the indentation for a line. Still, it does not call this function
for every line.
Still, indeed, it would have been nice to exist just one definition of
indentation. The author of lisp-indent-function is maybe different from the
author of indent-sexp, or maybe the same author forgot what he did.
If this is consider a bug, then the only one thing to do is to rewrite
completely the function indent-sexp.
I attach here a new patch, because there were 2 things that I do not like in
the patch I have just sent.
Now I insert the patch in the text, and I attach it in the same time.
Please consider just this latter patch.
Alin Soare.
Index: emacs/lisp/emacs-lisp/lisp-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emacs-lisp/lisp-mode.el,v
retrieving revision 1.199
diff -c -r1.199 lisp-mode.el
*** emacs/lisp/emacs-lisp/lisp-mode.el 17 Feb 2007 11:34:22 -0000 1.199
--- emacs/lisp/emacs-lisp/lisp-mode.el 22 Feb 2007 02:21:08 -0000
***************
*** 908,942 ****
(let ((normal-indent (current-column)))
(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))
(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))))))
--- 908,955 ----
(let ((normal-indent (current-column)))
(cond ((elt state 3)
;; Inside a string, don't change indentation.
! nil)
((and (integerp lisp-indent-offset) containing-sexp)
;; Indent by constant offset
(goto-char containing-sexp)
(+ (current-column) lisp-indent-offset))
+ ((save-excursion
+ ;; the car must be defined on the same line as the inner
parenthesis.
+ ;; in this case calculate-lisp-indent-last-sexp is not nil.
+ (and containing-sexp
+ (goto-char (1+ containing-sexp))
+ (skip-chars-forward " \t")
+ calculate-lisp-indent-last-sexp))
+ (or
+ ;; try to align the parameters of a known function
+ (and (boundp 'lisp-indent-function)
+ lisp-indent-function
+ (not retry)
+ (funcall lisp-indent-function indent-point state))
+ ;; if not a standard function, 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 ":"))
+ (let ((parse-sexp-ignore-comments t)
+ indent)
+ (goto-char calculate-lisp-indent-last-sexp)
+ (or (and (looking-at ":")
+ (setq indent (current-column)))
+ (and (> calculate-lisp-indent-last-sexp containing-sexp)
+ (< (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)
(t
normal-indent))))))
/patch
Description: Binary data
- Re: Indentation of constants in LISP, (continued)
- Re: Indentation of constants in LISP, A Soare, 2007/02/20
- Re: Indentation of constants in LISP, A Soare, 2007/02/20
- Re: Indentation of constants in LISP, A Soare, 2007/02/20
- Re: Indentation of constants in LISP, A Soare, 2007/02/20
- Re: Indentation of constants in LISP, A Soare, 2007/02/21
- Re: Indentation of constants in LISP, A Soare, 2007/02/21
- Re: Indentation of constants in LISP, A Soare, 2007/02/21
- Re: Indentation of constants in LISP,
A Soare <=
- Re: Indentation of constants in LISP, A Soare, 2007/02/21
- Re: Indentation of constants in LISP, A Soare, 2007/02/22
- Re: Indentation of constants in LISP, A Soare, 2007/02/23