Hi Luka.
Thanks for wrapping this up in one solution and the prompt to explore this
area further!
ta
IH
On Friday, 4 November 2022 at 14:07:44 UTC Luka wrote:
> Edward, Thomas, thanks for advice!
>
> Putting it all together, I think it could be a nice beginner's template
> to do something with the selected text in the body. I also use the power of
> regex for complex text-editing related tasks.
>
> command = 'add_line_end'
>
> # Undo begin
> b = c.undoer.beforeChangeNodeContents(p)
>
> #get selected text from body
> w = c.frame.body.wrapper
> s = w.getAllText()
> i, j = w.getSelectionRange()
>
> # to get entire lines:
> start, junk = g.getLine(s, i)
> junk, end = g.getLine(s, j)
>
> # or just selected text:
> # start, end = i,j
>
> txt=s[start:end]
>
> #do something
> txt=txt.replace('\n','\\\\\n')
>
> #insert edited text back
> p.b=p.b[:start]+txt+p.b[end:]
> c.redraw()
>
> # Undo End
> c.undoer.afterChangeNodeContents(p,
> command=command, bunch=b)
>
>
> пт, 4 нояб. 2022 г. в 15:38, Thomas Passin <[email protected]>:
>
>> No need to apologize! Leo can do so many things that it's hard to find
>> information, or even know there is something to look for. I looked in
>> LeoDocs.leo (you can open it from the Help menu). Search for _Undoably
>> changing body text_ (I originally just searched for _undo_). It says
>>
>> To undo a single change to body text::
>>
>> command = 'my-command-name'
>> b = c.undoer.beforeChangeNodeContents(p, oldYScroll=ypos)
>> # Change p's body text.
>> c.undoer.afterChangeNodeContents(p,
>> command=command, bunch=b, dirtyVnodeList=[])
>>
>> Someone else can correct me, but I don't think that the exact value of
>> the string *command* matters. Your script will probably have a command
>> name, though, so might as well use it.
>> On Friday, November 4, 2022 at 8:17:01 AM UTC-4 Israel Hands wrote:
>>
>>> Many thanks for such prompt and helpful advice. A significant part of
>>> what makes Leo so great. I'm off to try Luka's and Edward's solutions.
>>> Sorry to be so slow tbp1, but how do I set up undo?
>>>
>>> Thanks again from momentarily sunny Wales.
>>>
>>> IH
>>>
>>> On Friday, 4 November 2022 at 12:01:10 UTC [email protected] wrote:
>>>
>>>> Don't forget to set up for undo.
>>>>
>>>> On Friday, November 4, 2022 at 6:48:50 AM UTC-4 Edward K. Ream wrote:
>>>>
>>>>> On Fri, Nov 4, 2022 at 3:25 AM Luka <[email protected]> wrote:
>>>>>
>>>>> There are plenty of ways to do it in LEO but this is how I do it.
>>>>>>
>>>>>> Create a @button node with script, select text in body, and run:
>>>>>>
>>>>>> @language python
>>>>>>
>>>>>> #get selected text from body
>>>>>> w = c.frame.body.wrapper
>>>>>> s = w.getSelectedText()
>>>>>> start,end=w.getSelectionRange()
>>>>>> b=p.b
>>>>>>
>>>>>> #do something
>>>>>> s=s.replace('\n','\\\\\n')
>>>>>>
>>>>>> #insert edited text back
>>>>>> p.b=b[:start]+s+b[end:]
>>>>>> c.redraw()
>>>>>>
>>>>>
>>>>> Thanks, Luka, for this tip.
>>>>>
>>>>> Leo itself typically expands the selection to include entire lines.
>>>>> Like this (tested) code:
>>>>>
>>>>> w = c.frame.body.wrapper
>>>>> s = w.getAllText()
>>>>> i, j = w.getSelectionRange()
>>>>> start, junk = g.getLine(s, i)
>>>>> junk, end = g.getLine(s, j)
>>>>>
>>>>> 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 on the web visit
>> https://groups.google.com/d/msgid/leo-editor/92f3c9ea-ad0b-4e23-bfdd-ba98a7fb212bn%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/leo-editor/92f3c9ea-ad0b-4e23-bfdd-ba98a7fb212bn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
--
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 on the web visit
https://groups.google.com/d/msgid/leo-editor/72bd316c-a041-4ef2-84fb-a5fb50ca2950n%40googlegroups.com.