[clim-desktop-cvs] CVS clim-desktop
thenriksen
thenriksen at common-lisp.net
Fri Jun 2 21:06:32 UTC 2006
Update of /project/clim-desktop/cvsroot/clim-desktop
In directory clnet:/tmp/cvs-serv19697
Modified Files:
swine.lisp
Log Message:
Added fallback indentation for macros (proper indentation of &body and
&rest parameters even when no specific rules have been defined for the
operator). Belongs in Climacs itself (as usual).
--- /project/clim-desktop/cvsroot/clim-desktop/swine.lisp 2006/06/01 23:21:29 1.19
+++ /project/clim-desktop/cvsroot/clim-desktop/swine.lisp 2006/06/02 21:06:32 1.20
@@ -470,6 +470,36 @@
(show-note-counts notes (second result))
(when notes (show-notes notes (name buffer) "")))))
+;;; Fix indentation of macro forms:
+
+;; Redefine the basic method from Climacs to check the symbols argument list.
+;; This gives us Emacs/SLIME-style indentation regarding
+;; &body and &rest parameters in macros.
+(defmethod compute-list-indentation ((syntax lisp-syntax) symbol tree path)
+ (if (null (cdr path))
+ ;; top level
+ (let* ((arglist (arglist symbol))
+ (body-or-rest-pos (or (position '&body arglist)
+ (position '&rest arglist))))
+ (if (and (or (macro-function symbol)
+ (special-operator-p symbol))
+ (and (not (null body-or-rest-pos))
+ (plusp body-or-rest-pos)))
+ ;; macro-form with "interesting" arguments.
+ (if (>= (- (car path) 2) body-or-rest-pos)
+ ;; &body arg.
+ (values (elt-noncomment (children tree) 1) 1)
+ ;; non-&body-arg.
+ (values (elt-noncomment (children tree) 1) 3))
+ ;; normal form.
+ (if (= (car path) 2)
+ ;; indent like first child
+ (values (elt-noncomment (children tree) 1) 0)
+ ;; indent like second child
+ (values (elt-noncomment (children tree) 2) 0))))
+ ;; inside a subexpression
+ (indent-form syntax (elt-noncomment (children tree) (car path)) (cdr path))))
+
;;; Parameter hinting code.
;;; -----------------------
More information about the Clim-desktop-cvs
mailing list