В обсуждении статьи "Как заставить работать симлинки в Dropbox" Pomidorchi поставил интересную задачу:

В целом я сейчас ищу решение такой проблемы:

  1. заставить системную скриншотоделалку мака (та что по shift+cmd+3/4) кидать скрины в /Dropbox/Public/scr (добился этого с помощью Onyx)
  2. как-то эти скриншоты автоматически переименовывать в что-то вроде "2009-09-26_scr1.png"
  3. а уже потом кидать результат в буфер.

Дальше было уточнение, что покупать Hazel для этой небольшой задачи смысла нет, но в этой статье рассмотрю именно Hazel, а решение штатными средствами (или shell, или Automator, или Action Script) опишу в отдельной статье.

Хочу сказать, что с удовольствием приму идеи для проработки на блоге - и мне полезно, и читателям интересно.

Итак, Hazel. Это коммерческая программа стоимостью $21.95 (я только собираюсь её приобрести, пока идёт триальный срок). Ставится как "Preference Pane" и следит за файловой активностью в заданных каталогах. При обнаружении файлов, удовлетворяющих заданным правилам, производит над ними действия. "Automated Organization for your Mac". Программа получила заслуженно по 5 из 5 баллов в MacUser, VersionTracker, Mac Format и MacUpdate (ладно, 4.6 тоже округлённо даёт 5 :). Посмотреть полное описание функций можно на сайте NoodleSoft. Один из отзывов: "This application is gold I tell you, gold".

Приступим к решению задачи. Описывать, как установить Hazel, не буду - всё очевидно. Я слегка поменял каталоги и имена файлов по своему вкусу.

Идём в "System Preferences" и запускаем Hazel. В закладке "Info" я сразу выставляю "Show Hazel status in the menu bar" - на время создания и отладки очередного правила полезно иметь быстрый доступ к конфигурации.

Скриншоты, создаваемые комбинацией "Shift+Cmd+3/4", помещаются на Desktop, поэтому включаем слежение за этим каталогом (~/Desktop) и создаём правило "Screenshots" (не забываем сделать его активным)

Задаём условие отбора скриншотов - 'Name "starts with" "Screen shot"' и 'Extension "is" "png"'. Затем задаём действия, выполняемые над этими файлами.

Действие 1. "Move file" to folder "Screenshots". Перемещаем файл в Dropbox: ~/Dropbox/Public/Screenshots (предварительно этот каталог создаём)

Действие 2. "Rename file" with pattern "screenshot--"</p>

Меняем шаблон "date created" (если скриншоты делаются быстрее, чем раз в секунду, то можно добавить поле миллисекунд):

Действие 3. "'Run shell script' 'embedded script'". Логика по формированию Public URL и помещению в Clipboard.

Обратите внимание, что идентификатор dropboxId="243759" нужно поменять на свой, приведённый в любом Dropbox Public URL.

Public URL помещается в clipboard, а также дописывается в файл на десктопе "screenshots.txt". Полный текст скрипта:

###
# Необходимо сконфигурировать свой Dropbox userid
# Он берётся из Public URL
# http://dl.getdropbox.com/u/243759/Screenshots/screenshot-20090929-121921.png
dropboxId="243759"
dropboxURL="http://dl.getdropbox.com/u/${dropboxId}/Screenshots"

# Полный путь файла, перенесённому в каталог Dropbox
# /Users/ctrld/Dropbox/Public/Screenshots/screenshot-20090929-122523.png
filePath="$1"
# Извлекаем имя файла
# screenshot-20090929-122523.png
fileName=`basename "${filePath}"`

# Генерируем полный Public URL
# Однако нужен контроль, что синхронизация завершена -> TODO
dropboxPublicURL="${dropboxURL}/${fileName}"

# Записываем результат в конец файла screenshots.txt на десктопе
echo "${dropboxPublicURL}" >> ~/Desktop/screenshots.txt

# Заносим линк в clipboard.
# Внимание - старое содержимое clipboard перетирается
# Источник: http://www.macosxhints.com/article.php?story=2003050204544799
echo "${dropboxPublicURL}" | pbcopy

Действие 4. Выводим Growl-уведомление.

Всё сохраняем и проверяем работу. Задача выполнена. Наслаждаемся или же продолжаем добавлять или шлифовать функциональность.

Конечно же, все те же операции можно сделать и штатными средствами, но Hazel лично мне очень нравится.