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.