3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【サクラエディタ】Markdownにクリップボードから画像を貼り付ける

Posted at

オンライン勉強会が増えてきた

コロナ禍でオンラインでの勉強会が増えてきました。
現在の職場が全面的にリモートワークに移行したこともあり、平日の定時後でも勉強会に参加しやすくなってきました。

登壇資料の画像を貼り付けたい

愛用のサクラエディタで勉強会のメモをとっているのですが、登壇資料などのスクリーンショットを保存するときにいつも手間取っていました。

  • ペイントをいちいち開いて画像保存するか?
  • Excelか何かを開いておいて、そこを画像置き場にするか?
  • そもそも画像を貼り付けたいなら別のツールでメモを取る方がいいのでは?

など、試行錯誤していたのですがばっちりハマる解決策がなかなか見つからず。。。

VSCodeに乗り換えるか?

VSCodeの拡張の拡張機能として、編集中のMarkdownに画像(のリンク)を貼り付けられる「Paste Image」というものがあります。

vscode-paste-image

Markdownビューアーもあるし、そろそろ本格的にVSCodeに乗り換えるべきかとも思いましたが、Paste Imageの基本機能は、

  • Image will be saved in the folder that contains current editing file
  • The relative path will be paste to current editing file

とのことで、これだったらサクラエディタのマクロとかプラグインでどうにかなるのでは、と思い探し始めました。

マクロで作ってみた

結局探しても見つからなかったので自分で作ります。

サクラエディタのマクロではVBScriptが使えるので、クリップボードや画像ファイルの操作は普通にできるだろうと思っていたのですが、クリップボードから画像を直接読み出す方法がないんですね。
結局、VBScriptからPowerShellを呼び出して無理くり処理する方法を採用することにしました。

Dim exec_script
Dim filename

filename = Replace(Replace(Replace(Now(), "/", ""), ":", ""), " ", "")

exec_script = "powershell.exe -sta -WindowStyle Hidden -Command Add-Type -Assembly System.Windows.Forms;" _
& " if (!([Windows.Forms.Clipboard]::ContainsImage())) {exit} ;" _
& " [System.Windows.Forms.Clipboard]::GetImage().Save('./" & filename & ".png');" _
& " Echo '![./" & filename & ".png](./" & filename & ".png)'"

Set exec = CreateObject("WScript.Shell").Exec(exec_script)
Editor.InsText(exec.StdOut.ReadAll)

[System.Windows.Forms.Clipboard]::GetImage()で画像ファイルのオブジェクトが取れます。
CreateObject("WScript.Shell").Exec()の引数にコマンド文字列を渡すとPowerShellで処理してくれます。

PowerShellを非表示にして実行するやり方がわからなかったので、実行するとPowerShellのウィンドウが開いてしまいますが、とりあえず目的は果たせたのでここまで。

Exec()の代わりにRun()を使うなども見つけたのですが、Echoの結果が取れなかったり、何かもうひと工夫が必要そうだったので断念しました。

上記のスクリプトをサクラエディタのマクロとして登録して実行すると、編集中のファイルに![./yyyyMMddhhss.png](./yyyyMMddhhss.png)というリンクが挿入されます。
画像ファイルは同じフォルダに保存されます。
クリップボードに画像が格納されていない場合は何もしません。

GitHub

以下で公開しています。
ファイル名とか、保存先のフォルダとか、直した方がいいこともまだまだあるので、気が向いたら修正しようと思います。

投稿直前に気づいたけど、ファイル名の時刻部分がゼロ埋めできてないな。。。

sakura-editor_paste-img

参考資料

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?