On Tue, Feb 25, 2020 at 12:42 PM Xu Wang <[email protected]> wrote:
> Dear Leo Developer,
>
> If I know the GNX of one node, how shall I clone it to the position under
> current node(as a child of current position)?
>
Good question.
gnx's belong to vnodes, not positions. Your question is equivalent to
asking, given a vnodes, how do I create the desired clone.
Most of the time it will be easier to use positions rather than vnodes. For
example, here is tested code that, given a *position, *moves a clone of
that position to the last node of c.p:
# Get the position of a node whose headline is 'Target Node'
child_p = g.findNodeAnywhere(c, 'Target Node')
assert child_p
# Clone the node.
clone = child_p.clone()
# Move the node
p = c.p
n = p.numberOfChildren()
clone.moveToNthChildOf(p, n)
# Make all children visible and redraw.
p.expand()
c.redraw()
If all you have is a gnx, then you can search for any position whose vnode
has that gnx. Here is tested code.
child_p = None
for p in c.all_positions():
if p.gnx == 'ekr.20200225134818.1': # The gnx of my target node.
child_p = p
break
assert child_p
clone = child_p.clone()
And then you can proceed as before:
p = c.p # Don't use the p in the search loop!
n = p.numberOfChildren()
clone.moveToNthChildOf(p, n)
p.expand()
c.redraw()
HTH.
Edward
P.S. If performance is a big consideration, you might be able to use one of
Leo's dictionaries that associates vnodes with gnx's. But I'll leave that
complication for (much) later :-)
EKR
--
You received this message because you are subscribed to the Google Groups
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/leo-editor/5a1e06e9-7fa1-4102-b810-dfe0aa01a1d4%40googlegroups.com.