Web log de Serge Boisse
On line depuis 1992 !
Auteur : Serge Boisse
Voir aussi:
une checkbox
Ce plugin permet d'exécuter des extraits de code dans des blocs de code dans vos notes. Le plugin ajoute un bouton "Run" pour les blocs de code dans les langues prises en charge. En cliquant dessus, le code du bloc est exécuté. Après l'exécution, le résultat de l'exécution est affiché. Un élément d'entrée interactif est créé lorsque vos extraits de code lus attendent une entrée de l'utilisateur.
Le résultat n'est affiché qu'une fois l'exécution terminée. Il n'est pas possible d'entrer du texte sur la ligne de commande dans le programme exécuté. A noter que console.log(..) affiche le contenu dans la note après après le bloc js.
Les langages suivants sont pris en charge : CPP, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lua, CSharp, Tau-Prolog, Rust, Python, R, Shell et Powershell.
Python et Rust supportent les tracés intégrés. Tous les langages prennent en charge les commandes "magiques" qui vous aident à accéder aux chemins dans Obsidian ou à afficher des images dans vos notes.
Vous pouvez créer des blocs de code qui sont exécutés avant ou après chaque bloc de code du même langage et définir des injections de code globales.
ils sont stockés dans le fichier data.json du plugin
il faut remplacer les / par des \ dans le path de node.js ( C:\Program Files\nodejs) et celui de python. En fait c'est pas nécessaire d'entrer ces paramètres.
il faut les éditer pour que le bouton run (re)apparaisse
cf javascript
On utilise donc le plugin obsidian-execute-code
Pour que ça marche j'ai dû installer node.js sur l'ordi.
console.log("hello");
var g="serge";
function ajoute(x,y) {return x+y; }
console.log(g);
function hello(name) {
console.log(`Hello ${name}!`); // ici on utilise les string litterals (pas obligé)
}
hello(ajoute(3,4));
hello("Bob");
Hélas, la variable g n'est pas utilisable dans un autre snippet... SI ! C'est OK avec le notebook mode
//b = new Element("div")
madiv = document.querySelector("#madiv");
madiv.innerHTML="ce texte vient de javascript !"
ne marche pas... window et document inconnus. 😭
Il semble que l'on puisse créer des éléments HTML à la volée !
sauf qu'ils sont dans le bloc de code et ne sont pas interprétés par le navigateur. Comment faire de l'interactivité ? La solution c'est DataviewJS...
console.log(`$\\pi$ = 3.14`); // oK mais mathsjax pas reconnu
console.log('<input type="text" id="name" name="name" required minlength="4" maxlength="20" size="20" oninput="mydiv.innerHTML=this.value;">');
console.log("<div id='mydiv'>Type some text above</div>");
console.log("<b>bold ?</b>") // no...
hmm... j'ai trouvé un truc. console.log(this) !
Cela permet d'accèder aux variables définies dans un autre bloc mais c'est déjà le cas "en natif." avec le mode notebook...
console.log(this.g);
console.log(this.ownerDocument);
Pas super utile a priori... Sauf qu'il existe une commande magique @html(source)
@html("<i>HTML Caption</i>")
@html('<button onclick="fn(this)">coucou</button>');
texte = @html("bonjour");
function fn(el) {
el.innerHTML = "hello";// marche pas...
}
marche pas.
texte = `
<svg width="100%" height="100%" viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg">
<circle cx="300" cy="300" r="250" style="fill:peru;" />
<circle cx="200" cy="250" r="50" style="fill:black;" />
<circle cx="400" cy="250" r="50" style="fill:black;" />
<circle cx="190" cy="230" r="20" style="fill:white;" />
<circle cx="390" cy="230" r="20" style="fill:white;" />
<circle cx="250" cy="400" r="85" style="fill:saddlebrown;" />
<circle cx="350" cy="400" r="85" style="fill:saddlebrown;" />
<ellipse cx="300" cy="380" rx="50" ry="35" style="fill:black;" />
<ellipse cx="130" cy="100" rx="110" ry="70" style="fill:saddlebrown;"/>
<ellipse cx="470" cy="100" rx="110" ry="70" style="fill:saddlebrown;" />
</svg>
`;
@html(texte)
YES ! Mais il faut utiliser des backticks
@html('<input type ="button" value="coucou"/>');
@html('<button>Add to favorites</button>');
OK
function coucou() {console.log("hello");}
@html(`
<button onclick='coucou();'>Add to favorites</button>
`);
Marche pas... affiche ");'>Add to favorites</button>
function coucou() {
console.log("coucou");
}
texte = `<button onclick="hello()">Clique !</button>`;
@html(texte);
Pas d'erreur mais pas d'interaction... Erreur dans la console du debugger coucou is not defined
texte = `
<button onclick="console.log('toto'+window)">Clique !</button>
`;
@html(texte);
Pas d'erreur, pas d'interaction visible mais dans la console on a
toto[object HTMLButtonElement]
pour this dans les user messages. window et document sont également reconnus..
texte = `
<button onclick="window.serge=this;console.log('coucou')">Clique !</button>
`;
@html(texte);
@html("on a "+window.serge)
1er run erreur, 2eme affiche le bouton et coucou dans la console du debugger si cliqué
texte = `
<button onclick="console.log('Hello')">Clique !</button>
`;
@html(texte);
log le document dans la console js. Mais pas possible de le récupérer dans le code...
texte = `
<script>
function coucou() {
console.log("coucou");
}
</script>
<button onclick="coucou()">Clique !</button>
`;
@html(texte);
clic sur le bouton affiche coucou.... dans la console
texte = `
function coucou() {
console.log("coucou");
}
`
<button onclick= "texte">Clique !</button>
`;
@html(texte);
cf Python
def hello(name):
n = input("bonjour")
print("Hello", name+n)
if __name__ == "__main__":
hello("Serge")
en cliquant "Run" ça marche !
Un autre exemple avec des graphiques
import warnings # sinon on a des deprecated dans seaborn
warnings.filterwarnings("ignore") # idem
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("darkgrid")
iris = sns.load_dataset('iris')
sns.FacetGrid(iris, hue ="species", height = 5) \
.map(plt.scatter,'sepal_length','petal_length') \
.add_legend()
plt.show()
ça marche !
cf prolog
l'incroyable est qu'il ne faut rien installer pour que ça marche
cf la doc Tau-Prolog (page web)
pere(serge,sylvain).
pere(serge,remi).
pere(remi,nathan).
pere(remi,olivia).
pere(sylvain,erin).
pere(sylvain,anaelle).
grandPere(G,P) :- pere(G,F), pere(F,P).
% query
grandPere(X,Y).
Résultat :
X = serge, Y = erin
X = serge, Y = anaelle
X = serge, Y = nathan
X = serge, Y = olivia
Ca fonctionne ! Impossible néanmoins de faire des query en "input"
remarque : les diacritiques (accents, etc.) ne marchent pas dans les noms de variable.
Il semble possible d'appeler tu-prolog depuis javascript... cf http://tau-prolog.org/manual/a-simple-tutorial
dir
j'ai paramétré cmd, faute de bash...
Je ne connais pas mais normalement ça marche.
@vault
: Inserts the vault path as string.@note
: Inserts the note path as string.@title
: Inserts the note title as string.@show(ImagePath)
: Displays an image at the given path in the note.@show(ImagePath, Width, Height)
: Displays an image at the given path in the note.@show(ImagePath, Width, Height, Alignment[center|left|right])
: Displays an image at the given path in the note. (only in javascript and python)@html(HtmlSource)
: Displays HTML in the notethe magic commands are resolved before running the code, otherwise we would have to implement each magic command separately for each programming language
print("le titre de cette note est ",@title)
@show("https://upload.wikimedia.org/wikipedia/commons/a/aa/Philips_PM5544.svg",400px, 300px);
OK
@html("<h1>HTML Caption</h1>")
OK
Commentaires (0) :
Page :Ajouter un commentaire (pas besoin de s'enregistrer)
En cliquant sur le bouton "Envoyer" vous acceptez les conditions suivantes : Ne pas poster de message injurieux, obscène ou contraire à la loi, ni de liens vers de tels sites. Respecter la "netiquette", ne pas usurper le pseudo d'une autre personne, respecter les posts faits par les autres. L'auteur du site se réserve le droit de supprimer un ou plusieurs posts à tout moment. Merci !Ah oui : le bbcode et le html genre <br>, <a href=...>, <b>b etc. ne fonctionnent pas dans les commentaires. C'est voulu.