Extract note A content from a link in note B and pastit down the link. Is that Possible

Ok, thanks, I Will do that.

So here’s an example of the links (not everything, it would be too much) :

‘’’
[[Cerveau à l’origine du bien-être et de la souffrance.]]

[[La quête du bonheur pour soi même est vouée à l’échec]]

[[Le but de la méditation est de se transformer en une meilleure version de soi-même]]

[[L’esprit est un ensemble dynamique composé de succession d’instants de conscience]]

[[La méditation est un moyen d’analyser et comprendre la réalité]]

[[Pour méditer on observe les pensées, on passe à travers et on analyse la conscience.]] ‘’’

They are all made the same way.

Is that what you expected ? Do you need something else ?

I provided the error code before, is that helping ?

Thanks again for your help, much appreciated

1 Like

I don’t see in your console output what I was looking for. There should be messages like: “Invalid link: ‘[[Link]]’” in the very end. Don’t you get anything like this, after you trying to use the template?

I have change a little bit my way of generating my list of links and now I don’t have error anymore.

But it doesn’t work for all the links. So I guess it might have an error but according to the console, there’s nothing else.

I discovered Text Expand and Dataview (I use this one to generate my link list). Wouldn’t that be easier with an add-on like that ?

Are you using dataview or dataviewjs to produce the links in the first place? If the latter, then why don’t use that to also include the content of the files using something like await dv.io.load() directly instead of doing this as a secondary step?

Here is another version attempting to pull the content from the various links. This is slightly safer than previous versions since it checks for the full link, and allows for some text in front and after.

So save the following into a template file:

<%*
const content = tp.file.selection()
const lines = content.split("\n")
const LINK_RE = /\[\[.*\]\]/

for (const line of lines) {
  tR += line + "\n"
  
  const link = line.match(LINK_RE)
  if ( link ) {
    try {
      const linkContent = await tp.file.include( link[0] )
      tR += linkContent + "\n"
    } catch (error) {
      console.log(`Templater error for link: ${ link }:\n`, error)
      tR += "==No content found==\n"
    }
  }
} 
%>

And to run you either choose a hotkey for the template, or use the insert templater modal command, but before you insert the template be sure to select all the links you want to replace with a link and the content.

The previous versions, which doesn’t have this requirement will insert all the links from the current document at the point of the cursor when inserting the template, and leave other parts (aka all the links) untouched. This would appear to be some faulty links, but in fact it’s a faulty design choice since inserting a template by default will either be inserted at the cursor location, or replace the selected text with the output of the template.


To reiterate, after the inital setup of the template code into a template file of your choice, and potentially adding a hotkey of your choice, do the following:

  • Select all the lines containing links. This could very well be the entire file selected by doing Cmd A (or Ctrl A on windows)
  • Insert/run the template on the selected text, and it’ll get replaced by links following by the content of that link, if it has any
  • In addition, this version will produce an error message on the console if something fails, and add ==No content found== after the link in question

Hello Holroy,

Thanks for that code !

It looks to work perfectly well ! And it doesn’t forget any links, that’s even better. (@reaty : I really valuate your work as well !)

But it works only if I don’t generate links thanks to dataview. And if I want to copy/past links generated by Dataview, links are like that [link] and not like that [[link]]. So it’s a mess to deal with it …

The thing is that at the beginning of this topic, I didn’t use Dataview.

Now, It helps me organized my note automatically. On notes, I have on top, something like :
MoC : [[PSYCHOLOGY]]. So, when there’s a new note, there’s an automatic link on the page PSYCHOLOGY that link to my note. That’s an awesome add-on.

So now, Where would I put await dv.io.load() on your code to make it works with links generated by Dataview ?

Again : Thanks for the code (and your patience) !

Humm I am not sure if it would be possible to use your code on links generated by dataview.
When I select the content, click on the templater button, content is not selected anymore.

Complicated…

If the links are generated by dataview, you could potentially let that query also insert the content.

Do note, that will then become a dynamic query/page with the collation of everything, and not a static.

You can’t use/ run the template on top of the result from a query. At least not without some changes…

Yep, That’s my point.

I will find a way to make my links static. Otherwise it will be a mess.

Again, Thanks for your help !

1 Like

I have seen you help someone doing something very similar here : Can the notes filtered by dataview be set to automatically add a link to the current note? - #8 by holroy

Would you mind help me convert the wikilinks generated by dataview in obsidian links ?

I hope I am not asking to much. If it’s too long, I would understand.

Here’s a prompt I use to generate my links :

dataview 
TABLE from [[PSYCHOLOGIE]]

Thanks a lot for your help.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.