Andy Chambers wrote:
I got the js-escape working better last night and went on to try and
fill out the apropos demo but ran into
some difficulties.
I may need to rethink the macrology because when I put the following
into the web-apropos model, I just got
a list of progvs.
(mk-div ()
(mk-ul ()
(loop for func in (apropos-list "prog")
collect (mk-li ()
(mk-text func)))))
Don't feel bad, that is frequent "gotcha" even for loop veterans (and it
is loop, not macrology, slowing you down (somewhat abbreviated):
(loop for x in (apropos-list "prog")
collect (let ((x x)) ;; shadow the "x" abused by loop
(mk-text x)))
Also, only changes to attributes are getting propagated to the updates
slot, not changes to kids.
Hey, just send me the latest code and I'll figure it out. If you do not
have aserve working, we can probably figure it out with a test harness
that writes updates to the console.
I would make a top-level class:
(defmd xh-driver ()
search-string
(exported-only
...other input slots and really any slot you need to make this go...
(xml (driven-xml)))
(defun driven-xml
(mk-page
(loop for match in (apropos-list (search-string (u^ xh-driver)))
when (or (exportedp match)
(not (exported-only (u^ xh-driver))))
collect [xml for this symbol])))
Then (just typed in, polish required):
(defun test-xh ()
(let ((d (make-instance 'xh-driver
:search-string "prog" ;; no changes intended
:exported-only (c-in nil)))) ;; changes intended
(with-oa-updates-to-stream t ;; or "test.txt"
(loop repeat 2
do (setf (exported-only d) (not (exported-only d))))))
with-oa-updates-to-stream is left as an exercise. It needs OA to always
work by writing to some stream (*browser*? *xml-updates*?) and then you
just bind that to t or some *sys-something* or an open file stream.
I toggled both ways to test both /starting/ with nil and /changing/ to nil.
In short, I'm still plugging away at this but I might be further away
from producing something
useful than it has seemed so far. Sorry if I've got people's hopes
up. Its just the typical time estimates of
an inexperienced programmer.
haha, I think you are closer than you realize. Just send up flares early
and often.
I'm going to go back to celtk and try to understand the way it does
things a bit better and see if there's
anything fundamental I've missed. I should maybe code the apropos
thing in celtk to check how the user
code should look and make similar sort of code work for the web.
Here's a quick question. If you want to make the kids of a mk-stack
dependant on some other field in celtk,
do you have to explicitly (make-instance 'stack :kids (c? ...) or
should you still be able to use (mk-stack () ...)
mk-stack by default wraps what follows in a recalculating rule:
(defmacro def-mk-inline (name (unlabelled labelled))
`(defmacro ,name ((&rest initargs) &rest kids)
(if (evenp (length initargs))
`(make-instance ',',unlabelled
:fm-parent *parent*
,@initargs
:kids (c? (the-kids ,@kids)))
`(make-instance ',',labelled
:fm-parent *parent*
:text ,(car initargs)
,@(cdr initargs)
:kids (c? (the-kids ,@kids))))))
(def-mk-inline mk-row (frame-row labelframe-row))
(def-mk-inline mk-stack (frame-stack labelframe-stack))
kt
_______________________________________________
cells-devel site list
cells-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/cells-devel