L’une des motivations pour passer mon blog à Markdown était de cesser de compter sur Windows Live Writer qui n’est plus pris en charge et comporte un certain nombre de bugs. Mais une chose pour laquelle il était pratique était de coller des images dans des publications. Je pourrais simplement utiliser l’outil d’écrêtage de Windows et coller l’image directement dans un message. Dans Markdown, je dois enregistrer l’image dans un fichier et générer un balisage pour faire référence à ce fichier.
Pour de petites tâches automatisées comme celle-ci, mon outil goto est l’incroyable LINQPad. J’ai des centaines de scripts là-dedans pour faire toutes sortes de choses utiles.
Génération d’un nom de fichier
Tout d’abord, mon script doit déterminer où enregistrer l’image dans le presse-papiers. Cela dépend de l’ordinateur sur lequel je cours car mon référentiel GitHub est cloné sur différents chemins. Voici une astuce LINQ rapide et sale pour choisir le bon dossier quel que soit l’ordinateur sur lequel je me trouve:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
Ensuite, je dois générer un nom de fichier. J’utilise le « slug » du message comme préfixe, plus un nombre incrémental. Encore une fois, j’utilise un peu de LINQ pour trouver le premier suffixe qui n’a pas été utilisé.
var prefix = "css-social-media-icon-list";var fileName = Enumerable.Range(1,100) .Select(n => Path.Combine(path,$"{prefix}-{n}.png")) .First(p => !File.Exists(p));
Enregistrement des images du presse-papiers
Maintenant que nous savons où nous voulons enregistrer l’image, nous pouvons utiliser la classe System.Windows.Forms.Clipboard
pour accéder à l’image et l’enregistrer dans un fichier PNG. Ne soyez pas rebutés par les « formulaires Windows » dans le nom – cette classe est le moyen le plus simple d’accéder au presse-papiers et peut être utilisée à partir d’une console ou d’une application WPF si vous le souhaitez.
Je mets également à jour le contenu du presse-papiers avec le Markdown que je souhaite coller dans mon article de blog. Alors maintenant, tout ce que je dois faire après avoir utilisé l’outil de clip Windows pour prendre une capture d’écran est d’exécuter ce script, puis de coller le Markdown dans mon éditeur de texte.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
Aller plus loin?
J’ai donc collé une image dans mes publications markdown presque aussi facilement qu’avec Windows Live Writer, mais l’étape suivante consisterait à incorporer un processus similaire au code Visual Studio que j’utilise comme éditeur. Je pense que cela pourrait être transformé en une extension de code Visual Studio, mais je soupçonne que cela signifie une réécriture dans le nœud.js et apprendre comment fonctionnent les extensions de code VS. Si je le gère, je publierai sur la façon dont je l’ai fait.
Mais j’espère que cela est utile pour tous ceux qui ont besoin d’un accès au presse-papiers en C #, et vous donne également quelques idées sur la façon dont les scripts LINQPad peuvent être utilisés pour automatiser les tâches manuelles.