On Saturday, April 19, 2025 at 7:40:39 PM UTC-5 Félix wrote:

I've made two small but useful improvements which you can preview in the 
branch 'felix-fix-script-results'.


Thanks for this work. My short response: the PR is useful and sound. More 
details below. 
 

*1- Return values from commands*

Until now, calling a command with doCommandByName, executeMinibufferCommand 
or doCommand didn’t return the result of the underlying method. 
(c.keyHandler.funcReturn was removed a while ago) That’s now fixed — these 
functions will return whatever the command’s method returns.

For example, the convert-blanks command (which replaces leading spaces with 
tabs) returns True if it made any changes, and False otherwise. Previously, 
calling it with *c.doCommandByName('convert-blanks')* would return None, 
but now it correctly returns the boolean result — just like calling 
*c.convertBlanks()* directly.


This feature eliminates a confusing difference between various parts of 
Leo's API. I fully approve this change.

The diffs for * c.executeScriptHelper* do not reveal a subtle detail. 
Happily, this detail will cause no problem.

The detail: *c.executeScript* and *c.executeScriptHelper* take a *namespace 
*kwarg. What happens if namespace (a dict) contains a "result" key? 
Happily, the answer is, nothing. The local *d* var (another dict) does not 
contain a "result" key, so the lines:

if namespace:
    d.update(namespace)

will not affect the namespace kwarg.  Therefore, the PR will not affect the 
exec statement in any way.

Note: I do not believe this analysis needs to be part of the new 
documentation ;-) You might mention it in the PR itself.

*2 - Another feature for user-defined scripts*

I've also added a way for user-defined scripts (those inside @command or 
@button nodes) to return values as well. Since top-level return statements 
aren't allowed in scripts executed with exec, you can now define a global 
variable named result, and Leo will return its value after the script runs. 
For example:

global result
result = 42


The analysis above shows that "polluting" the namespace of the exec 
statement will *never* cause any problem. 

*I've attached a small Leo file demonstrating a use case for this.*


This demo works as advertised in the felix-fix-script-results branch. The 
whole-process button will loop indefinitely in devel, but that's not a real 
problem ;-)

Let's merge this PR soon.

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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/leo-editor/41b187ea-456c-452a-9516-944d0731abbfn%40googlegroups.com.

Reply via email to