Итак, сделаем автоматическую загрузку снимков экрана на свой домен.
Как настроить автоматическую загрузку скриншотов на сервер на macOS
В iCopyWriter.ru мы используем общее правило: сервер служит для того, чтобы делиться скриншотами и записями экрана между коллегами. У каждого разработчика есть своя папка, куда он может загружать файлы и делиться ими с миром. Для автоматизации этого процесса мы обычно используем ShareX — отличное приложение, которое делает всю работу за нас. Но есть одна проблема: ShareX работает только на Windows.
Когда я перешел на macOS несколько месяцев назад, я столкнулся с проблемой — просто делиться скриншотами с коллегами оказалось сложнее, чем я думал. Я попробовал такие программы, как CloudApp и Skitch, но, к сожалению, они не оправдали моих ожиданий.
И тут у меня появилась безумная идея: а что если сделать все самому?
Цель и инструменты
Для начала я решил поставить перед собой конкретные цели для создания собственного инструмента:
- Использование стандартного сочетания клавиш Cmd + Shift + 4
- Возможность выбора между режимами «выделить фрагмент» и «выделить окно»
- Возможность задать имя файла с опцией использовать дату или сгенерировать случайное имя
- Автоматическая отправка файла на сервер и генерация ссылки
Для выполнения задачи я воспользовался Automator — инструментом для автоматизации процессов на macOS. Начнем с создания нового приложения, выбрав Файл -> Новое -> Приложение.
Шаг 1. Создание скриншота
Первым делом нам нужно сделать скриншот (какой сюрприз!). Для этого мы воспользуемся командой screencapture в терминале:
screencapture -i ~/Desktop/tmpScreenshot.png
В Automator с левой стороны окна перетащите действие «Выполнить скрипт оболочки» и выберите нужную оболочку (в моем случае это zsh). Затем введите команду для создания скриншота и сохраните изображение на рабочий стол.
Шаг 2. Выбор имени файла
Следующим шагом мы напишем простой скрипт на AppleScript, который позволит задать имя файла или отменить операцию:
on run
set cryptname to do shell script "openssl rand -hex 10"
set datename to do shell script "date -ju +%Y-%m-%d_%H.%M.%S"
set cryptbutton to "Использовать \"" & cryptname & "\""
display dialog "Имя файла (расширение будет добавлено автоматически)" default answer datename buttons {"Отмена", cryptbutton, "ОК"} default button "ОК" cancel button "Отмена" with title "Новый скриншот"
if button returned of result is cryptbutton then
return cryptname & ".png"
else
return (text returned of result) & ".png"
end if
end run
Здесь мы генерируем случайное имя файла с помощью openssl и получаем текущую дату. Далее отображается диалоговое окно, где пользователь может выбрать имя файла или отменить операцию.
Шаг 3. Загрузка файлов на сервер
Это был самый сложный этап. Вот скрипт, который отправляет файл на сервер:
export PATH=/usr/local/bin:$PATH
HOST='0.0.0.0'
URL='url.com'
USER='user'
PASS='pass'
PORT=2252
REMOTEPATH="/remote/path/$1"
LOCALFILE="/Users/user/Desktop/tmpScreenshot.png"
sshpass -p $PASS scp -P $PORT $LOCALFILE $USER@$HOST:$REMOTEPATH
rm "$LOCALFILE"
echo "https://$URL/$USER/$1" | pbcopy
Здесь важно передать имя файла как аргумент, используя переменную $1. После отправки файла он удаляется с рабочего стола, а ссылка на файл копируется в буфер обмена.
Шаг 4. Отображение уведомлений
В заключение, мы добавляем уведомление о том, что операция завершена успешно, а ссылка скопирована в буфер обмена.
Шаг 5. Назначение горячих клавиш
Теперь самое сложное позади. Чтобы назначить скрипт на сочетание клавиш, перейдите в Системные настройки -> Клавиатура -> Сочетания клавиш. Здесь найдите сочетание Cmd + Shift + 4 и измените его, например, добавив Ctrl.
Затем в разделе Службы выберите наш скрипт и назначьте его на выбранное сочетание клавиш.
Итог
Это, конечно, не идеальное решение, но оно полностью покрывает мои потребности. На все про все у меня ушло около 4 часов — я никогда не работал с Automator и AppleScript до этого. Но я доволен результатом!
Не стесняйтесь улучшать и модифицировать скрипт (например, добавить обработку ошибок) и делитесь своими наработками в комментариях. В Dogtronic мы уделяем особое внимание совместному обучению и взаимной мотивации, даже в таких маленьких, но интересных задачах, как эта. Если вам тоже нравится экспериментировать и быть креативным, заходите в наш раздел Карьера!