A recent rev added the p.u property, which you can think of as a synonym 
for p.v.unknownAttributes on *both* sides of an assignment.

The example in Leo's documentation for access uA's is *way *too 
complicated. In fact, the following suffices to set the 'n' attribute for 
test_plugin:

plugin_name = 'test_plugin'
d = p.u.get(plugin_name,{})
d ['n'] = 8
p.u [plugin_name] = d

p.u is the *outer* dictionary. p.u.get.(plugin_name, {}) is the inner 
dictionary. The last line is all that is needed to update the outer 
dictionary!

It is *very* easy to search for particular uA's. The following script 
prints all the keys in the outer-level uA dictionaries:

for p in c.all_unique_positions():
    if p.u:
        print(p.h, sorted(p.u.keys()))

This is a typical usage of Leo's generators 
<http://leoeditor.com/tutorial-scripting.html#generators>.  Generators 
visit each position (or node) quickly. Even if you aren't going to program 
much, you should be aware of how easy it is to get and set the data in each 
node. In fact, now would be a great time to read Leo's Scripting Tutorial 
<http://leoeditor.com/tutorial-scripting.html> again :-) This will allow 
you to "dream bigger" with Leo.

The following script creates a list of all positions having an icon, that 
is, an outer uA dict with a 'lineYOffset' key.

aList = [p.copy() for p in c.all_unique_positions() if 'lineYOffset' in p.u]
print('\n'.join([p.h for p in aList]))

Yes, the lineYOffset key is wonky and unhelpful, but it can't be changed 
now.  Hmm, maybe the code could support an an alternative clearer key, say 
str_core_icon.  Furthermore, the str_core_* keys should probably be 
reserved for Leo's core.

*Important*: If you don't understand these lines, *please *study Python's list 
comprehensions <http://www.secnetix.de/olli/Python/list_comprehensions.hawk>.  
They are incredibly useful. '\n'.join(aList) is a great idiom to know.  
str.join is one of python's most useful string methods 
<https://docs.python.org/2/library/stdtypes.html#string-methods>. It 
converts between lists and strings.

Imo, Leo should have p.temp_u and v.temp_u properties, so that getting and 
setting temp uA's will be as easy as getting and setting uA's. I'll do this 
today.

These Code Academy threads are having an immediate impact.  Focusing on 
simple, practical tasks has revealed rough spots in both Leo's code and 
Leo's docs.

As always with the Code Academy, questions and comments are strongly 
encouraged. Make *sure* you understand the code examples in this post. They 
are the foundation for programming in Leo. 

Edward

-- 
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 leo-editor+unsubscr...@googlegroups.com.
To post to this group, send email to leo-editor@googlegroups.com.
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to