Прежде чем перейти к основной теме, имейте в виду, что эта статья была впервые написана для Блога 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 за изображения.