Una de las motivaciones para mover mi blog a Markdown fue dejar de confiar en Windows Live Writer, que ya no es compatible y tiene una serie de errores. Pero una cosa para la que era conveniente era pegar imágenes en publicaciones. Podría usar la herramienta de recorte de Ventanas y pegar la imagen directamente en un post. En Markdown, necesito guardar la imagen en un archivo y generar algún marcado para hacer referencia a ese archivo.
Para pequeñas tareas automatizadas como esta, mi herramienta goto es el increíble LINQPad. Tengo cientos de guiones para hacer todo tipo de cosas útiles.
Generar un nombre de archivo
En primer lugar, mi script necesita averiguar dónde guardar la imagen en el portapapeles. Esto depende del equipo en el que esté ejecutando, ya que mi repositorio de GitHub se clona a diferentes rutas. Aquí hay un truco de LINQ rápido y sucio para elegir la carpeta correcta en cualquier computadora en la que esté:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
A continuación, necesito generar un nombre de archivo. Utilizo la» babosa » de la publicación como prefijo, más un número incremental. Una vez más, uso un poco de LINQ para encontrar el primer sufijo que no se ha utilizado.
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));
Guardar imágenes del portapapeles
Ahora que sabemos dónde queremos guardar la imagen, podemos usar la clase System.Windows.Forms.Clipboard
para acceder a la imagen y guardarla en un archivo PNG. No se desanime con «Formularios de Windows» en el nombre: esta clase es la forma más fácil de acceder al portapapeles y se puede usar desde una consola o aplicación WPF si lo desea.
También actualizo el contenido del portapapeles con el Markdown que quiero pegar en mi publicación de blog. Así que ahora todo lo que necesito hacer después de usar la herramienta clip de Windows para tomar una captura de pantalla es ejecutar este script y luego pegar el Markdown en mi editor de texto.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
¿Llevándolo más lejos?
Así que tengo que pegar una imagen en mis publicaciones de descuento casi tan fácil como lo fue con Windows Live Writer, pero el siguiente paso sería incorporar un proceso similar en el Código de Visual Studio que uso como mi editor. Creo que esto podría convertirse en una extensión de código de Visual Studio, pero sospecho que significa una reescritura en el nodo.js y aprender cómo funcionan las extensiones de código VS. Si lo logro, publicaré sobre cómo lo hice.
Pero esperamos que esto sea útil para cualquier persona que necesite acceso al portapapeles en C#, y también le brinde algunas ideas de cómo se pueden usar los scripts de LINQPad para automatizar tareas manuales.