Hi Florian, List!
I use more general thing for a couple years.
(macroexpand-1
'(proga
(multiple-value-bind (a b) (values 1 2))
(let b 2)
(flet f () a)
(f))
(multiple-value-bind (a b)
(values 1 2)
(let ((b 2))
(flet ((f () a)) (f))))
You can extend proga to understand any particular macro, e.g.
(proga
(with-open-file f "name" :direction :input)
(read-line f))
Source (under permissive license) is here:
http://code.google.com/p/def-symbol-readmacro/
I still think it might be reasonable to transform
(proga
(some-macro . something)
.
body)
To
(some-macro something . body)
Where some-macro is a macro with lambda-list (something &body body)
Proga is not perfect yet, but it is usable and I find it useful.
It saved me many hours of visual parsing of parens.