山下泰平の趣味の方法

これは趣味について考えるブログです

macOS でスクリーンショットに情報を追加するためのヒント

スクリーンショットに書誌情報を書き込むのを作った

私はわりとスクリーンショットを撮る。

f:id:cocolog-nifty:20190119174146p:plain

ここで問題となるのが撮ったスクリーンショットの元ファイルである。

f:id:cocolog-nifty:20190119174218p:plain

人にもよるんだろうけど、私の場合は国会国立図書館デジタルライブラリーの資料をスクリーンショットすることが多い。読んでる途中で面白がって撮ったものだから、なんの本のスクリーンショットなのか全く記憶にない。こんなのどの本のものなのか、思い出すの不可能だと思われる。

f:id:cocolog-nifty:20190119174334p:plain

これでは困るのでスクリーンショットを撮ったら自動的にファイルへ情報を追加するスクリプトを書いた。私の環境でしか動かないからスクリプト自体は公開しないけど、いくつか書くの大変な部分があったので情報の共有のためメモを書いておく。

追記

もっとまともなの教えてもらった。

普通はgyazoで十分だと思った。しかしどうしても書誌情報を自動的にスクリーンショットに埋め込みたい異常者は自分で頑張るしかないっぽい。

どうやって作ったのか

ファイルのコメント(com.apple.metadata:kMDItemFinderComment:)部分と、exif の UseComment に情報を書き込んでいる。

f:id:cocolog-nifty:20190119174440p:plain

コメントに情報あるだけで十分なんだけど、ずっと Mac を使うかどうか分からない。それだけじゃなくて Apple はすぐにやったり止めたりするんで、あんまり信用できない。コメント消滅してしまい困ってジーニアスバーで質問したとしても、知るかボケ ResEdit でも使ってろアホがって言われて終りだと思う。だから exif にも情報を書き込んでいる。これだとどういう環境に移行しても情報が残る。

機能を実現するにあたって、一番ムズかったのが karabiner-elements で shellscript を実行すると発生する謎の挙動であった。 macOS 標準のスクリーンショットと同じように使いたいので、Karabiner-Elements でプレビューの上でスクリーンショットを撮る際にだけシェルスクリプトが動くみたいな設定にしている。ところが普通のシェルスクリプトだと スクリーンショットに exiftool でファイルに情報を書き込むことができない。他の機能は動く。exiftoolのみダメ、理由は謎だけど open で .command ファイルを開いたら動く。

 "shell_command": "open screenshot.command" }

未だに理由は謎だけど、とにかく動いているんで良しとする。

AppleScript でウィンドウの情報をゲットしたり、コメントの書き込みをしている。 shellscript で実行するためには次みたいにする。

# 外部ファイルから実行する。
osascript prevname.scpt 
# shellscript の中に書く
OUTPUT=`osascript << SCRIPT
tell application "Finder"
    set filePath to "Macintosh HD:Users:xxx:Pictures:ScreenShot:2019:filename"
    set comment of (filePath as alias) to "info"
end tell
SCRIPT`

あんまりよく分かってないけど、とりあえず動いてるからまあいっかーっていう感じである。

ファイルの情報は lsof っていうコマンドで取得している。

lsof -c Preview | awk '/'"${jpgn}"'/' 

感覚的なものだけど本当は AppleScript で書いたほうが良いのできると思う。

雑感

この機能は前々から欲しいって思ってたけど、面倒で書かなかった。頑張ったら便利すぎて気分が良くなり、なんで標準機能じゃないのかって思うくらいのレベルである。ひとつやふたつならそんなに意味ないけど、スクリーンショット1000枚越えてくると便利さに大幅な差が出てくる。自分がよくスクリーンショット撮るアプリケーション用に作ったら良さでてくると思う。まともなプログラマの人がこういうアプリ作ってくれると良いけど、アプリやユーザーごとに欲しい情報が違うみたいなのがある。それはさておきとにかく便利でサイコーで、もっと早く書いておけば良かった。今年はスクリーンショットを撮りまくる年にしていきたい。