• このエントリーをはてなブックマークに追加


ss-1429069723

はじめに

Mac 用スクリーンキャプチャツール Skitch,Evernote とくっついていろいろ残念になってしまった version 2.0 になって以来,version 1.X をずっと使ってきていましたが,AppStore の通知が毎日「アップデート」とか出てそのたびに「明日再通知」するのもいいかげん嫌気がさしたので,しぶしぶ最新版にアップデートしてみました.

で.

「やめときゃよかった」のひとことw

主に次の 3点:

  1. ホットキーを任意に割り当てられない
  2. ファイル名に foobar.jpg とか打っても,旧バージョンのように保存時の拡張子が自動的に変わらない
  3. 選択キャプチャのホットキー Command + Shift + 5 が,Emacs での query-replace のキーバインド Meta + % と衝突,かつ Skitch 側が優先される

特に 3つ目は私にとって致命的.これ以上 Skitch を使うのを諦めました.そもそも Evernote との連携とかどうでもいいし.

screencapture コマンド

個人的な要求としては,「Mac 備え付けのスクリーンキャプチャ(Command + Shift + 4)の,ファイル名とか保存先とか指定できればそれでよい」くらいなので,その辺りをぐぐってみたところ,次あたりのエントリを確認:

defaults コマンドで設定できるようですが,そもそも,根本的なコマンドとして screencapture が存在し,いろいろなオプションでコントロールできることを知りました.(詳細は man screencapture 参照)

Alfred の Wordflows を使ってラップしてみる

仕様

  • 「選択」スクリーンキャプチャできる
  • ファイル名を ss-{unixtime}.png とする
  • デスクトップでない,特定のディレクトリに保存される
  • 保存されたファイルのパスがクリップボードにコピーされる
  • 保存された画像が勝手に「プレビュー」アプリで開く
  • 上記を,Alfred ランチャから cap として呼び出せる
  • また,ホットキー Command + F11 でも呼び出せる

Workflow "cap"

ss-1429069723

「Run Script」には,次のような shellscript を書いてます:

#!/bin/bash
capturedir="$HOME/box/ss"
ssname={query}
if [ "${ssname}" = "" ]; then
    ssname="ss-$(echo -n $(date +%s))"
fi
file=${capturedir}/$(basename ${ssname} .png).png
 
screencapture -i $file
open -a /Applications/Preview.app $file
echo -n $file

※ 本来ならばアプリケーション Box 用のディレクトリ Box Sync を指定したかったのですが,スペースを含むパスだとうまく動いてくれないので,ln -s ~/Box\ Sync ~/box してそのリンクを指定しています.

結果

こんな感じで動作するようになりました(このキャプチャでは,デスクトップに保存するようになっています):

おわりに

Skitch が使いものにならなくなった(個人的な要求に合わなくなった)ので,Alfred の Workflows を使って screencapture コマンドをラップする,簡単なスクリーンキャプチャツールを作ってみたお話でした.

「勝手に『プレビュー』アプリが開く」というのは,今後うっとうしくなってくるかもしれません.そのあたりを指定できるしくみはまたそのうちに.