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.