een van de motivaties voor het verplaatsen van mijn blog naar Markdown was om te stoppen met vertrouwen op Windows Live Writer die niet langer wordt ondersteund en heeft een aantal bugs. Maar een ding was het handig voor was het plakken van beelden in berichten. Ik kon gewoon gebruik maken van de Windows knippen tool en plak de afbeelding direct in een bericht. In Markdown moet ik de afbeelding opslaan in een bestand en wat markup genereren om naar dat bestand te verwijzen.
voor kleine geautomatiseerde taken zoals deze, mijn goto tool is de verbazingwekkende LINQPad. Ik heb honderden scripts om allerlei nuttige dingen te doen.
het genereren van een bestandsnaam
Allereerst moet mijn script uitzoeken waar de afbeelding op het klembord moet worden opgeslagen. Dit hangt af van op welke computer ik draait als mijn GitHub repository gekloond wordt naar verschillende paden. Hier is een snelle en vuile LINQ truc om de juiste map welke computer ik op Kies:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
vervolgens moet ik een bestandsnaam genereren. Ik gebruik de “slug” van de post als een voorvoegsel, plus een oplopend nummer. Nogmaals, ik gebruik een snel stukje LINQ om het eerste achtervoegsel te vinden dat niet is gebruikt.
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));
afbeeldingen opslaan vanaf het klembord
nu we weten waar we de afbeelding willen opslaan, kunnen we de klasse System.Windows.Forms.Clipboard
gebruiken om toegang te krijgen tot de afbeelding en deze op te slaan in een PNG-bestand. Laat je niet afschrikken door “Windows Forms” in de naam – deze klasse is de makkelijkste manier om toegang te krijgen tot het klembord en kan worden gebruikt vanaf een console of WPF app als je wilt.
ik werk ook de inhoud van het klembord bij met de Markdown die ik in mijn blogpost wil plakken. Dus nu alles wat ik moet doen na het gebruik van de Windows clip tool om een screenshot is dit script uit te voeren en plak de Markdown in mijn teksteditor.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
verder gaan?
dus ik heb het plakken van een afbeelding in mijn markdown berichten bijna net zo eenvoudig als het was met Windows Live Writer, maar de volgende stap zou zijn om een soortgelijk proces in Visual Studio Code die ik gebruik als mijn editor op te nemen. Ik denk dat dit kan worden omgezet in een Visual Studio Code extensie, maar ik vermoed dat betekent dat een herschrijven in node.js en leren hoe VS Code extensies werken. Als het me lukt, post ik over hoe ik het deed.
maar hopelijk is dit handig voor iedereen die toegang heeft tot het klembord in C#, en geeft het je ook enkele ideeën over hoe LINQPad scripts kunnen worden gebruikt om handmatige taken te automatiseren.