agreed - I already have some scripts like that. In fact I have occasionally wondered about suggesting a simple 'dialog description language' to allow more complicated dialogs than are currently available to be created.
Still not quite what I want on this occasion though ;-) On Wednesday, December 11, 2024 at 5:51:57 PM UTC [email protected] wrote: > You could also have your script pop up a dialog to type the args into. > > On Wednesday, December 11, 2024 at 12:03:30 PM UTC-5 jkn wrote: > >> 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/cd410843-0a63-43b8-8d8b-75a993eaf867n%40googlegroups.com.
