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/9a4db809-a091-4589-9f50-e03cc46077e3n%40googlegroups.com.