en av motivationerna för att flytta min blogg till Markdown var att sluta förlita sig på Windows Live Writer som inte längre stöds och har ett antal buggar. Men en sak som det var bekvämt för var att klistra in bilder i inlägg. Jag kunde bara använda Windows clipping tool och klistra in bilden direkt i ett inlägg. I Markdown måste jag spara bilden i en fil och generera en del markup för att hänvisa till den filen.
för små automatiserade uppgifter som detta är mitt goto-verktyg den fantastiska LINQPad. Jag har hundratals skript där för att göra alla möjliga användbara saker.
generera ett filnamn
först och främst måste mitt skript ta reda på var du ska spara bilden på urklippet till. Det beror på vilken dator jag kör på eftersom mitt GitHub-arkiv klonas till olika vägar. Här är ett snabbt och smutsigt LINQ-trick för att välja rätt mapp oavsett vilken dator Jag är på:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
Därefter måste jag skapa ett filnamn. Jag använder postens” slug ” som ett prefix, plus ett inkrementerande nummer. Återigen använder jag en snabb bit av LINQ för att hitta det första suffixet som inte har använts.
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));
spara bilder från Urklipp
nu vet vi var vi vill spara bilden till, vi kan använda klassen System.Windows.Forms.Clipboard
för att komma åt bilden och spara den i en PNG-fil. Bli inte avskräckt av ”Windows Forms” i namnet – den här klassen är det enklaste sättet att komma åt urklippet och kan användas från en konsol eller WPF-app Om du vill.
jag uppdaterar också innehållet i urklippet med Markdown jag vill klistra in i mitt blogginlägg. Så nu behöver jag bara göra efter att ha använt Windows clip tool för att ta en skärmdump, kör det här skriptet och klistra sedan in Markdown i min textredigerare.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
ta det vidare?
så jag har klistrat in en bild i mina markdown-inlägg nästan lika enkelt som det var med Windows Live Writer, men nästa steg skulle vara att införliva en liknande process i Visual Studio Code som jag använder som min redaktör. Jag tror att detta skulle kunna förvandlas till en Visual Studio kod förlängning, men jag misstänker att det innebär en omskrivning i node.js och lära sig hur VS Kodförlängningar fungerar. Om jag hanterar det kommer jag att skriva om hur jag gjorde det.
men förhoppningsvis är det användbart för alla som behöver urklippsåtkomst i C#, och ger dig också några tankar om hur LINQPad-skript kan användas för att automatisera manuella uppgifter.