uma das motivações para mudar meu blog para Markdown foi parar de confiar no Windows Live Writer, que não é mais suportado e tem vários bugs. Mas uma coisa que era conveniente era colar imagens em postagens. Eu poderia apenas usar a Ferramenta de recorte do Windows e colar a imagem diretamente em um post. No Markdown, preciso salvar a imagem em um arquivo e gerar alguma marcação para se referir a esse arquivo.
para pequenas tarefas automatizadas como esta, minha ferramenta goto é o incrível LINQPad. Eu tenho centenas de scripts lá para fazer todos os tipos de coisas úteis.
gerando um nome de arquivo
em primeiro lugar, meu script precisa descobrir para onde salvar a imagem na área de transferência. Isso depende do computador em que estou executando, pois meu repositório GitHub é clonado para caminhos diferentes. Aqui está um truque LINQ rápido e sujo para escolher a pasta correta em qualquer computador que eu esteja:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
em seguida, preciso gerar um nome de arquivo. Eu uso o” slug ” do post como um prefixo, além de um número incremental. Novamente, eu uso um pouco de LINQ para encontrar o primeiro sufixo que não foi usado.
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));
salvando imagens da área de transferência
agora sabemos para onde queremos salvar a imagem, podemos usar a classe System.Windows.Forms.Clipboard
para acessar a imagem e salvá-la em um arquivo PNG. Não seja adiado por “formulários do Windows” no nome – esta classe é a maneira mais fácil de Acessar a área de transferência e pode ser usada em um console ou aplicativo WPF, se desejar.
eu também atualizo o conteúdo da área de transferência com o Markdown que quero colar na minha postagem do blog. Então agora tudo que eu preciso fazer depois de usar a ferramenta clipe do Windows para fazer uma captura de tela é executar este script e, em seguida, colar o Markdown no meu editor de texto.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
levando mais longe?
então eu tenho colando uma imagem em meus posts markdown quase tão fácil como era com o Windows Live Writer, mas o próximo passo seria incorporar um processo semelhante ao Código do Visual Studio que eu uso como meu editor. Acho que isso pode ser transformado em uma extensão de código do Visual Studio, mas suspeito que isso signifique uma reescrita no node.js e aprendendo como funcionam as extensões de código VS. Se eu conseguir, vou postar sobre como fiz isso.
mas espero que isso seja útil para quem precisa de acesso à área de transferência Em C# e também lhe dê algumas idéias de como os scripts do LINQPad podem ser usados para automatizar tarefas manuais.