Thanks for the comments/encouragement Edward

    I too have a few scripts such as the above, which I customise on an ad 
hoc basis. I'm not trying to eliminate that kind of fun ;-). This is for 
the situation when I have a few fixed variants of operation.

I am making progress my following Thomas' pointer to the use of k.get1arg, 
to prompt and get a return parameter from the minibuffer. As mentioned this 
is not my favourite approach, but it will do as a start.

Thanks for the pointer to the use of c.interactive.* . I enjoy wandering 
down these little passages of Leo's design...

PS: TIL about g.cls(), used in your script above! ;-)

    Regards
    Jon N




On Wednesday, December 11, 2024 at 4:23:09 PM UTC Edward K. Ream wrote:

> On Monday, December 9, 2024 at 3:36:37 PM UTC-6 jkn wrote:
>
> I've been meaning to ask this for ever...Is there a way to pass 
> argument(s) to leo @command-s?
>
>
> Hi Jon,
>
> Good question. The short answer is "no", but there are workarounds.
>
> I often use bespoke scripts that I customize by hand. For example, here is 
> a script that I use to import multiple files:
>
> @language python
> """Recursively import all python files in a directory and clean the 
> result."""
> @tabwidth -4 # For a better match.
> g.cls()
> dir_ = r'<<path to a folder>>  # <--- customize as needed
> c.recursiveImport(
>     dir_=dir_,
>     kind = '@clean', # '@auto', '@clean', '@nosent','@file',
>     recursive = True,
>     safe_at_file = True,
>     theTypes = ['.py',],
>     verbose = True,
> )
> if 1:
>     last = c.lastTopLevel()
>     last.expand()
>     if last.hasChildren():
>         last.firstChild().expand()
>     c.redraw(last)
> print('Done')
>
> I will typically execute this script several times, so it would be *less* 
> convenient to "generalize" it by asking for a path.
>
> *Other workarounds*
>
> It's almost always simplest to write your own scripts. But if you *really* 
> want to write a general command, Leo provides ways to do that.
>
> The *big hint*: look for code in Leo's codebase that does something 
> similar to what you want. For example, Leo's find commands prompt for one 
> or more arguments. The code isn't pretty. *find.find-next* and 
> *find.change-all* show how to set up the required state machines.
>
> The node *c.interactive** in leoCommands.py contains helpers that set up 
> state machines.
>
> *Summary*
>
> Writing bespoke scripts is almost always the simplest solution.
>
> Other solutions involve state machines. I would only consider such 
> approaches in extraordinary circumstances.
>
> HTH.
>
> 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/6063b851-5ed6-4fec-8621-6ecc0c19209cn%40googlegroups.com.

Reply via email to