I don't know if Edward would approve, but this also works and seems 
convenient:

If you execute this:

@g.command('y-f1')
def y_f1(x, y):
    g.es(x * y, c)

Then in any outline you can do this:

d = g.global_commands_dict
d['y-f1'](2,3)
# Prints 6

On Monday, October 31, 2022 at 1:46:00 PM UTC-4 Thomas Passin wrote:

> Using *@g.CommanderCommand* would probably be better, since once run it 
> would be available to all outlines.
>
> On Monday, October 31, 2022 at 1:05:53 PM UTC-4 Thomas Passin wrote:
>
>> On Monday, October 31, 2022 at 11:12:14 AM UTC-4 jkn wrote:
>>
>>> Thanks, this looks very interesting...
>>>
>>> I have one question - something I have wondered about before. If I have 
>>> your example code as a button command, say ... then where/how can I put the 
>>>
>>> def toggle_app_tab(log, tabname, top_widget):
>>>     # ...
>>>
>>> code, in order for it to accessible by multiple such buttons/commands? 
>>> I've never been sure about this.
>>>
>>> Thanks, J^n
>>>
>> [snip]
>>
>> For the function to be available to all outlines, I'm sure people have 
>> various ideas.  One thing I've done in the past (with other functions) is 
>> to assign it to some object.  I tend to use c, the outline's commander.  If 
>> Edward ever changes it to use slots, I suppose this wouldn't work any 
>> more.  Using this technique, your launch command would first look to see if 
>> it has been assigned to c.  If not, it runs the def and assigns it.  Then 
>> it would be invoked.  Something like this sketch -
>>
>> has_tabbed_app_toggle = hasattr(c, 'toggle_app_tab')
>> if not has_tabbed_app_toggle:
>>     def toggle_app_tab(log, tabname, top_widget):
>>           # Body of function here
>>     c.toggle_app_tab = toggle_app_tab
>>
>> # Invoke function here
>>
>> You can even make the function into a method of c.  Other people may do 
>> that differently, but I think the easiest way is 
>>
>> c.has_tabbed_app_toggle = has_tabbed_app_toggle.__get__(c)
>>
>> If you did this, you would need to change the function to include *self*, 
>> and you would need to use *self* instead of *c* in the code.
>>
>> There is also a Leo decorator, *g.CommanderCommand*, that you could use 
>> (it would have to be run first before the function could be used, and your 
>> function cannot use "g"):
>>
>> @g.CommanderCommand('z-f1')
>> def z_f1(self, x, y):
>>     print(x * y)
>>
>> Then:
>> c.z_f1(2, 3)
>> # prints 6
>>
>> (It seems to me that there was something recently about not using this 
>> decorator, but I can't remember for sure).
>>
>

-- 
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/bd855744-afa8-4720-8bac-224f41a0626an%40googlegroups.com.

Reply via email to