I am really thinking of the situation where I have already captured an 
image to the clipboard (using some other app...), and then want to paste 
into Leo. But there will undoubtably be something useful in what Terry has 
done

On Saturday, March 9, 2024 at 8:34:45 PM UTC tbp1...@gmail.com wrote:

> Yup, Terry Brown has already done most of it for us in the screen_capture 
> plugin.  Here's the docstring:
>
> """
> screen_capture.py
> =================
>
> Capture screen shots - single frames are useful.  The
> `Recorder` class can also capture frames continuously but that's not
> really useful, it doesn't handle audio or video encoding, and can't 
> maintain
> a 30 fps frame rate.  The code for doing so is not hooked up in this 
> plugin.
>
> Screen captures are saved in ``~/.leo/screen_captures`` with
> timestamps in the filenames.
>
> Commands
> --------
>
> ``screen-capture-5sec``
>   Wait five seconds, then take a screen shot.
> ``screen-capture-now``
>   Take a screen shot.
>
> Settings
> --------
>
> ``@string screen-capture-save-path``
>   Save screen shots here instead of ~/.leo/screen_captures
>
> Terry Brown, terry_...@yahoo.com, Fri Apr 19 16:33:45 2013
> """
>
> The code may need to be updated for Qt6, since it was originally written 
> for Qt4 in 2013. Or just the key capture part of the code could be used, 
> since the entire plugin is more complicated than necessary.  Also it 
> doesn't capture a part of the screen as best as I can see, only the whole.
> On Saturday, March 9, 2024 at 3:27:30 PM UTC-5 jkn wrote:
>
>> I would expect that to be somewhat os-dependant (I mostly use Linux), but 
>> perhaps it is there. I will try to take a look for clipboard-paste 
>> functions.
>>
>>
>>
>> On Saturday, March 9, 2024 at 8:22:44 PM UTC tbp1...@gmail.com wrote:
>>
>>> I seem to remember that somewhere in the code base, Leo code to capture 
>>> the screen has already been worked out.  If that's the case we're in clover.
>>>
>>> On Saturday, March 9, 2024 at 3:09:24 PM UTC-5 jkn wrote:
>>>
>>>> The way I have been using the Obsidian feature is to paste image bytes 
>>>> (eg. from a screen region capture). So Obsidian saves a file:
>>>>
>>>> /path/to/attachments/ 
>>>>
>>>> Pasted image 20240228230106.png
>>>>
>>>>
>>>> Where /path/to/attachments is an Obsidian setting, and the name of the 
>>>> file is clearly a timestamp.
>>>>
>>>>
>>>> Obsidian only uses markdown, so it inserts 
>>>>
>>>>
>>>> ![[Pasted image 20240228230106.png]]
>>>>
>>>>
>>>> into the 'node being edited'
>>>>
>>>>
>>>> I think you can also drag and drop files into a 'node'.
>>>>
>>>>
>>>> There would clearly have to be some work to make this generally useful 
>>>> in a Leo context...
>>>>
>>>>
>>>>
>>>> On Saturday, March 9, 2024 at 7:35:15 PM UTC tbp1...@gmail.com wrote:
>>>>
>>>>> Shouldn't be hard.  What would be on the clipboard?  Image bytes?  Or 
>>>>> an image filename?  I often select an image in a file manager window, 
>>>>> copy 
>>>>> it to an "images" subdirectory of the current outline, then write the 
>>>>> embedding code into and "images" child node.  That would be easy to write 
>>>>> a 
>>>>> script for.
>>>>>
>>>>> On Saturday, March 9, 2024 at 2:14:41 PM UTC-5 jkn wrote:
>>>>>
>>>>>> This looks interesting and useful, thanks Thomas. I confess I 
>>>>>> rarely/never use Leo with images, I really should experiment a little.
>>>>>>
>>>>>> Recently I have been using Obsidian as a note-taking app (Joplin is 
>>>>>> similar). Neither are as capable as Leo, in many ways, but they have 
>>>>>> their 
>>>>>> niceties.
>>>>>> One that is handy when note-taking is the ability to paste *from the 
>>>>>> clipboard*. You can setup an area (directory0 in an Obsidian 'vault' - 
>>>>>> then 
>>>>>> 'paste from clipboard' will
>>>>>> (a) create a unique filename within the image directory, and put the 
>>>>>> clipboard contents in there as eg. a .png file
>>>>>> (b) add a (markdown) reference to the new image in the 'note' that 
>>>>>> you are in.
>>>>>>
>>>>>> It'd be nice to have something similar in Leo... ;-)
>>>>>>
>>>>>> Regards, Jon N
>>>>>>
>>>>>> On Saturday, March 9, 2024 at 7:04:19 PM UTC tbp1...@gmail.com wrote:
>>>>>>
>>>>>>> We can't directly insert an image into a standard Leo node because 
>>>>>>> they are text-only.  I find this very annoying sometimes, especially 
>>>>>>> when I 
>>>>>>> am writing a note and want to include an image.  
>>>>>>>
>>>>>>> But we can do the next best thing - insert an ReStructuredText (RsT) 
>>>>>>> instruction to display an image so that we can view it with the 
>>>>>>> viewrendered3 plugin (VR3). The instruction is short and easy, but it's 
>>>>>>> still annoying to type and I usually forget the exact details. I have a 
>>>>>>> button that toggles VR3 on and off so that it's easy to view an 
>>>>>>> embedded 
>>>>>>> image once the RsT instruction is there. An embedding command would 
>>>>>>> make 
>>>>>>> embedding with Leo as easy as embedding an image in a word processor.  
>>>>>>>  Aha, this is Leo, let's write a script!
>>>>>>>
>>>>>>> Here is a script that pops up a file dialog and inserts a relative 
>>>>>>> path to the chosen file.  There are several small variations which I 
>>>>>>> discuss after the code.
>>>>>>>
>>>>>>> """Insert RsT code at cursor to display an image.
>>>>>>>
>>>>>>> The path to the image file will come from a file dialog.
>>>>>>> This action is undoable.
>>>>>>> """
>>>>>>> PATH = g.app.gui.runOpenFileDialog(c,
>>>>>>>     title="Import File",
>>>>>>>     filetypes=[("All files", "*"),],
>>>>>>>     defaultextension=".*",
>>>>>>>     multiple=False)
>>>>>>>
>>>>>>> if PATH:
>>>>>>>     from os.path import relpath
>>>>>>>     PATH = relpath(PATH)
>>>>>>>     PATH = PATH.replace('\\', '/').replace('"', '').replace("'", '')
>>>>>>>     IMAGE_TEMPLATE = f'''
>>>>>>>
>>>>>>> .. figure:: {PATH}
>>>>>>>     :scale: 50%
>>>>>>>
>>>>>>> '''
>>>>>>>     w = c.frame.body.wrapper
>>>>>>>     p = c.p
>>>>>>>     s = p.b
>>>>>>>     u = c.undoer
>>>>>>>
>>>>>>>     start, _ = w.getSelectionRange()
>>>>>>>
>>>>>>>     undoType = 'insert-rst-image-code'
>>>>>>>     undoData = u.beforeChangeNodeContents(p)
>>>>>>>
>>>>>>>     head, tail = s[:start], s[start:]
>>>>>>>     p.b = head + IMAGE_TEMPLATE + tail
>>>>>>>
>>>>>>>     c.setChanged()
>>>>>>>     p.setDirty()
>>>>>>>     u.afterChangeNodeContents(p, undoType, undoData)
>>>>>>>     c.redraw()
>>>>>>>
>>>>>>> Variations:
>>>>>>> 1.  If you want an absolute path instead of a relative path, delete 
>>>>>>> the lines
>>>>>>>     from os.path import relpath
>>>>>>>     PATH = relpath(PATH)
>>>>>>> with
>>>>>>>
>>>>>>> 2. If you  want to get the path from the clipboard instead of a file 
>>>>>>> dialog, replace the lines
>>>>>>>
>>>>>>> PATH = g.app.gui.runOpenFileDialog(c,
>>>>>>>     title="Import File",
>>>>>>>     filetypes=[("All files", "*"),],
>>>>>>>     defaultextension=".*",
>>>>>>>     multiple=False)
>>>>>>>
>>>>>>> with the line 
>>>>>>>
>>>>>>>     PATH = g.app.gui.getTextFromClipboard()
>>>>>>>
>>>>>>> 3. If you want the embedded image to be full width instead of 50%, 
>>>>>>> delete the line
>>>>>>>
>>>>>>>     :scale: 50%
>>>>>>>
>>>>>>> 4. You can make this work with Markdown or Asciidoc by using their 
>>>>>>> embedding instruction in the TEMPLATE instead of the RsT one.
>>>>>>>
>>>>>>> I have added the command to my own local menu.  VR3 can open in a 
>>>>>>> tab in the log pane; the command for toggling in a tab is 
>>>>>>> *vr3-toggle-tab. * I usually like opening it in the log pane 
>>>>>>> instead of in its own separate pane.
>>>>>>>
>>>>>>> If you would like to create a local menu of your own and don't know 
>>>>>>> how, it's easy.  Just ask and I'll show what to add to 
>>>>>>> myLeoSettings,leo.
>>>>>>>
>>>>>>

-- 
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 leo-editor+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/b82de781-5ebc-4405-8def-de54e1009503n%40googlegroups.com.

Reply via email to