Как написать сервис на ПХП
На Маке есть такая странная фича — сервисы. Это такие то ли программы, то ли не программы, которые встраиваются во все приложения и могут как-то преобразовывать контент в них. Например, они могут делать что-то с выделенным текстом. Если прикрутить такой текстовый сервис, то он будет доступен по правой кнопке наряду со стандартными операциями типа копирования, трансформации или произнесения вслух.
Разные приложения могут добавлять свои сервисы, например после установки Твиттера любой выделенный текст можно твитнуть. Но текст — это не обязательно. Сервис может уметь что-то делать с файлами или другими объектам. Девон-технолоджис много всяких сервисов дают. Сервисами никто не пользуется, потому что фиг поймёшь, как с ними совладать и какую пользу они могут принести. Не пользовался особо и я.
Но недавно назрела необходимость сделать себе макросы, которые бы заменяли простые куски текста на большие простыни ХТМЛ-кода. Чтобы писать pic image.jpg, а оно превратилось в целую кучу вёрстки для правильного размещения изображения, да ещё и размер файла само вписывало. Причём не в редакторе кода, где таких фич завались, а в любом месте. Долго объяснять, зачем, но надо было. Программерский мозг не терпит неавтоматизированной работы.
Оказалось, что всё очень просто. Запускаем Автоматор (это ещё одна недооценённая фича Мака) — он спросит, что мы хотим создать. Выбираем сервис и делаем в нём одно-единственное действие — выполнить скрипт:
Настраиваем, чтобы выделенный текст шёл скрипту в stdin и заменялся результатом выполнения (всё в правой части скриншота). Осталось написать сам скрипт на ПХП, а это может даже ребёнок (no pun intended). Саша Карпинский научил, что в начале скрипта нужно заклинание, чтобы он заработал, то есть всё вместе получится как-то так:
#!/usr/bin/php
<?
$input = trim (file_get_contents ('php://stdin'));
if ($input == 'SOPA') die ('PIPA');
echo $input;
?>
Ну, например. А дальше идём в «Систем преференсес», в настройку клавиатуры, и вешаем наш волшебный сервис на любую кнопку. Да, ПХП на Маке встроенный, то есть ничё про это думать не надо.