スクリーンショットをすぐに記事に追加できたら便利だ。
org-modeでスクリーンショットをファイル内に素早く取り込めるよう、org-downloadパッケージが用意されている。
M-x package-list-packages~M-x package-install でorg-downloadをインストールしよう。

スクリーンショットはgnome-screenshotやscrot, flameshotなど色々なものがあるが、
3つ試した上でflameshotにした。
決め手はスクリーンショットを撮った後にすぐに図を編集できること。
テキストの追加や矢印や矩形などの図形挿入、モザイク処理もできる。
惜しい点はウィンドウを選択してスクリーンショットが撮れないこと。
なお、gnome-screenshotはウィンドウが選択できるが編集ができないのでボツにした。
Ubuntu24.04では以下のコマンドでflameshotがインストールできる。

sudo apt install flameshot

Emacsの設定ファイルに以下を追加する。

;; for org-download
(setq org-download-heading-lvl nil)
(require 'org-download)
(setq org-download-screenshot-method "flameshot gui --raw > %s")

org-download-heading-lvlの設定はお好みで。
デフォルトは0で一番上の階層の見出しがフォルダになって保存される。
ox-hugo用にカテゴリーで見出しを作っており、 *Emacs の下でスクリーンショットを撮った場合は
[保存先フォルダ]/Emacs/タイムスタンプ.png に保存される。
nilにしておけば保存先フォルダに直接保存される。

スクリーンショットの保存フォルダはorgファイルごとに設定できる。
orgファイルの冒頭に以下の1行を追加する。

-*- mode: Org; org-download-image-dir: "~/savedir/static/img"; -*-

savedirは任意のフォルダで良いが、staticを挟んでおくとox-hugoが自動でhugoディレクトリのstaticフォルダにコピーしてくれるので便利。
ここでEmacsを再起動する。

起動後、orgファイルを開き、スクリーンショットを挿入したいところで M-x org-download-screenshot するとスクリーンショット撮影画面になる。
マウスで切り取りたい範囲をドラッグして、(必要に応じて編集して)、Enterを押すとorgファイル内に画像が挿入される。

Emacs起動時のウィンドウをスクリーンショット撮影した。


今後スクリーンショットはたくさん撮ることになるのでキーバインドを割り当てようと思う。

つまづいた点

Emacsの設定ファイルでもスクリーンショット保存フォルダは設定できる。
ただし、Emacsの設定ファイルに以下の順序で処理するとorg-download-image-dirがnilになっていた。

;; for org-download
(require 'org-download)
(setq org-download-image-dir "~/hogehoge")
(setq org-download-heading-lvl nil)
(setq org-download-screenshot-method "flameshot gui --raw > %s")

以下のようにrequireする前に設定するとちゃんと保存された。

;; for org-download
(setq org-download-image-dir "~/hogehoge")
(setq org-download-heading-lvl nil)
(require 'org-download)
(setq org-download-screenshot-method "flameshot gui --raw > %s")

ただしorgファイルごとに設定することもできるので、今回はEmacsの設定ファイルでorg-download-image-dirを設定するのをやめた。
staticフォルダはox-hugo特有のものなので、ox-hugo用のorgファイルにだけ設定したほうが良いだろう。

確認環境

Ubuntu 24.04
Emacs 30.2
Org mode version 9.7.11
org-download 20241118.1846
flameshot v12.1.0
ox-hugo 0.12.2

参考

org-download github