I like the sound of this! I will take a look, thanks for your work here, 
Felix.

    J^n

On Sunday, April 20, 2025 at 1:15:51 PM UTC+1 Edward K. Ream wrote:

> 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/d4169598-5f69-4e91-91d5-756772b57330n%40googlegroups.com.

Reply via email to