Прежде чем перейти к основной теме, имейте в виду, что эта статья была впервые написана для Блога Antistatique — веб-агентства в Лозанне, Швейцария. Место, где я работаю веб-разработчиком Full Stack.
Не стесняйтесь прочитать это здесь или проверить там: https://antistatique.net/fr/node/343
Получить весь код в моем Gist: https://gist.github.com/Sudei/ad0c1330966522c05f504d71d29f675b
Приятного чтения.
Как разработчик, я часто запускаю команды, выполнение которых требует времени:
- git pull
- установка композитора
- установить npm
Учитывая, что я не очень терпеливый человек, мне очень скучно ждать, пока закончатся эти команды, поэтому в это время я обычно переключаюсь на какое-то другое занятие, например:
- Проверка веб-сайтов Twitter/Tech/Hacking,
- Готовить и (иногда) пить кофе,
- Игра T-Rex Runner — скрытая бесконечная беговая игра Chrome.
Через 15 минут я, наконец, возвращаюсь к своему терминалу с холодным кофе и обнаруживаю, что забыл cd в нужной папке. Повторяйте еще 15 минут.
Не существует лучшего способа?
Работа тяжелая. Отвлечений полно. А времени мало
— Адам Хохшильд, американский писатель, журналист и лектор
Решение №0 — Младший профессор
Ждем, просматривая несколько гифок прямо на терминале с Gifi. Одно из моих любимых решений, но для некоторых недостаточно крутое.
Решение №1 — Парадигма Средиземья
Делаем все инструменты быстрее, а разработчики более терпеливыми. Возможно, это сработает в параллельной вселенной, где существует магия.
Решение №2 — Эффект светящейся рыбы
Используйте короткий скрипт, который использует терминал-уведомитель и добавьте его к каждой команде, например:
$ git pull [email protected] | notify-me
Это довольно круто и выполняет свою работу, но… я ленив и не хочу ничего добавлять к своим командам или предсказывать, является ли моя команда долго выполняющейся командой или нет, еще до ее запуска.
Решение №3 — Алгоритм дружбы
Как насчет того, чтобы попробовать другой подход? Вместо того, чтобы пытаться обнаружить длительно выполняемые команды, мы могли бы просто отправить уведомление, когда CLI не находится на переднем плане. Ммм, звучит хорошо, но возможно ли это? С iTerm и OSX 10.9+ вы можете это сделать!!
1.Создайте новую команду с именем notify.
$ touch /usr/local/bin/notify && chmod +x /usr/local/bin/notify $ vim /usr/local/bin/notify
2. Скопируйте и вставьте этот системный скрипт внутрь
#!/usr/bin/env osascript on run argv tell application "System Events" set frontApp to name of first application process whose frontmost is true if frontApp is not "iTerm2" then set notifTitle to item 1 of argv set notifBody to "succeded" set errorCode to item 2 of argv if errorCode is not "0" set notifBody to "failed with error code " & errorCode end if display notification notifBody with title notifTitle end if end tell end run
3. Добавьте пользовательскую функцию с именем f_notifyme и предоставьте ее iTerm с помощью PS1.
vim ~/.zshrc
4. Скопируйте и вставьте функцию
function f_notifyme { LAST_EXIT_CODE=$? CMD=$(fc -ln -1) # No point in waiting for the command to complete notify "$CMD" "$LAST_EXIT_CODE" & } export PS1='$(f_notifyme)'$PS1
5. Мы сделали это! Наконец, перезагрузите исходный файл вашего терминала source ~/.zshrc и наслаждайтесь!
Все права на изображения принадлежат их правообладателям.
Большое спасибо @Antistatique за обзор и @gratisography за изображения.