Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Запуск сайтов из Spotlight

Занялся потихоньку автоматизацией своих задач на «Маке».

Очень хотелось сделать так, чтобы по короткому имени, набираемому в Spotlight, открывались какие-то сайты. В интранете «Яндекса» очень много сайтов, которые я открываю десятки раз за день, вот я и подумал — было бы круто, если бы я набирал в Spotlight «wiki», нажимал Enter и мне открывался бы сайт wiki.yandex-team.ru.

Я знаю, что тут много ребят сидят на Windows, поэтому поясню. Spotlight (его аналог) есть на Windows 7 — это поисковая строка, куда можно вбить начальные буквы какого-то названия, а операционная система предложит к запуску список программ и/или файлов, имена или метаинформация которых наилучшим образом подходит под заданную пользователем строку.

В Mac OS X удобно, что это поисковое поле появляется по кнопке Ctrl+Пробел.

Написать плагин к Spotlight мне пока слабо́, а вот набросать на AppleScript программу, открывающую одноимённый сайт — пожалуйста.

Идея такова: кладу на диск одну и ту же программу в нескольких копиях, с разными именами — «wiki», «jira», «calendar» и так далее. Теперь их можно запускать откуда угодно, включая Spotlight. После запуска программа смотрит какое у неё имя, прибавляет к нему префикс/суффикс и проверяет существует ли получившийся домен, если да, то открывает его в браузере.

Программу надо сохранить при помощи редактора AppleScript (AppleScript Editor) с нужным именем (↑⌘S), формат файла должен быть «программа» («application»).

Вот сама программа (наверное маску «%.yandex-team.ru» нужно будет убрать, она вам будет мешать, если вы только не работаете в «Яндексе»):

-- Ищет по маскам хост, подставляя имя программы,
-- если найден, открывает его в браузере
-- bolknote.ru апрель 2011

tell application "System Events"
    set appname to the name of the current application
end tell

repeat with mask in {"%.yandex-team.ru", "www.%.ru", "www.%.com"}
    set AppleScript's text item delimiters to "%"
    set mask to text items of mask
    set AppleScript's text item delimiters to appname
    set hostname to "" & mask
    
    if resolve(hostname) then
        open location "http://" & hostname
        exit repeat
    end if
end repeat

on resolve(host)
    try
        do shell script "host '" & host & "'"
        return true
    on error
        return false
    end try
end resolve

Это пока мой первый опыт программирования в AppleScript, так что, возможно, какие-то вещи можно было сделать проще, напишите я поправлю.

Добавлено позднее: в комментариях один из читателей предложил более простой и изящный вариант. Ура!

41 комментарий
Артур 2011

Все делается гораздо проще — открываете браузер, заходите на какой-нить сайт, заносите его в закладки. Потом, при вводе в адресную строку первой буквы из названия сайта, адресная строка автозаполнится и останется только на «ввод» нажать и вы на вашем сайте.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Артур:

Наверное это работает в «Сафари», увы, в «Опере» и «Файрфоксе» это у меня не работает.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Артур:

Нужно, наверное, пояснить, что в настройках «Spotlight» у меня все галочки стоят.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Артур:

Да, я попробовал (добавил закладку в «Сафари»). В основном, меня интересуют довольно распространённые имена, они встречаются в документах, именах папок. В итоге, у меня веб-страницы стоят в самом конце и по Enter запускается что угодно, только не нужная веб-страница.

malinnikov.ru 2011

В свойствах файла есть поле «Комментарии Spotlight». Можно попробовать туда писать нужные ключевые слова, вместо создания копий файла с разными именами.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для malinnikov.ru:

Спасибо! К сожалению, я сомневаюсь, что Spotlight как-то указывает программе с каким именем он её запускает. Я попробовал поискать что-то на эту тему, не нашёл. Нужно писать плагин, но для этого надо многое прочитать.

malinnikov.ru 2011

Да, понял, что у вас имя скрипта имеет значение.

Скрипты — хорошее дело, но поиск по закладкам — штатное средство системы. Если нужно юзать альтернативный браузер, то можно было бы (в Сафари) стащить иконку сайта в папку, создается файл <site url>.webloc. Поскольку это просто xml-файлик с урлом внутри, то спотлайт будет находить его по названию, а приложением, ответственным за его открытие, можно сделать любой браузер.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для malinnikov.ru:

О! Спасибо! Это ровно то, что надо! Круто, спасибо!

Евгений Степанищев (bolknote.ru) 2011

Комментарий для malinnikov.ru:

Правда это совсем не XML:

bolk-osx:~ bolk$ hexdump bolknote.webloc

0000000 62 70 6c 69 73 74 30 30 d1 01 02 53 55 52 4c 5f
0000010 10 13 68 74 74 70 3a 2f 2f 62 6f 6c 6b 6e 6f 74
0000020 65 2e 72 75 2f 08 0b 0f 00 00 00 00 00 00 01 01
0000030 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00
0000040 00 00 00 00 00 00 00 25
0000048

bealex (bealex.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Попробуй Alfred. Там вроде бы это штатная опция, и много другого command-line-style. Аналог — launchBar, можешь потестить и выбрать.

malinnikov.ru 2011

Комментарий для Евгения Степанищева:

А я затащил его в TextWrangler, он сразу xml показал.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для bealex.livejournal.com:

Как только я пересел на Мак, мне тут же стали советовать софт, платный софт. Почему подразумевается, что я должен тратить кучу денег на допиливание системы под себя? :( Я этого совсем не хочу.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для malinnikov.ru:

А я затащил его в TextWrangler, он сразу xml показал.

Странно, а мне показал текст URL, который я вводил при создании.

malinnikov.ru 2011

Комментарий для Евгения Степанищева:

Странно, а мне показал текст URL, который я вводил при создании.

неточно выразился, не в окно редактора, а на его иконку в доке. Ну или Файл-Открыть просто.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для malinnikov.ru:

Ага, их можно создавать и в формате XML, но «Сафари» создаёт в виде бинарного файла с ресурсами.

rm 2011

alfred не платный, плата там за расширенную функциональность

Евгений Степанищев (bolknote.ru) 2011

Комментарий для rm:

Без расширенной функциональности он почти ничего не умеет, так следует из описания.

bealex (bealex.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Платный софт в мире макоси — это возможность получить то, что нужно. Его всегда можно попробовать. Почти всегда же есть бесплатные аналоги. В данном случае — QuickSilver. Но я давно не парюсь. Если есть отличная софтинка — поддержу разработчика, пускай он ее пилит, плагины к спотлайту пишутся не так просто как хотелось бы, да и времени нет.

bealex (bealex.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Ну, и, если посчитать, сколько времени я экономлю, используя лончеры... Все тут же окупается. Для мака действительно куча замечательного, простого и недорогого софта. А если искать скидки и покупать бандлами — вообще получается почти бесплатно.

И, да, можно не покупать. Я же не заставляю. Просто у меня была та же проблема, я ее решил вот так. Мне очень нравится. Просто поделился.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для bealex.livejournal.com:

Я просто не настолько богат, чтобы покупать такую кучу софта, которую мне уже насоветовали (не только в комментариях, но и в оффлайне).

А этот самый QuickSilver что даёт? Чем лучше Spotlight’a, а то из описания мне не очевидно совсем.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для bealex.livejournal.com:

Кажется его можно просто расширять через AppleScript, это его достоинство?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для bealex.livejournal.com:

И, да, можно не покупать. Я же не заставляю. Просто у меня была та же проблема, я ее решил вот так. Мне очень нравится. Просто поделился.

Не-не, это же не какая-то к тебе персональная претензия, просто заметил странную тенденцию.

Alick (alick.ru) 2011

Комментарий для Евгения Степанищева:

QuickSilver что даёт? Чем лучше Spotlight’a.

Всем лучше. Это такой весьма продвинутый Spotlight. Как-раз для автоматизации таких вот операций, типа открытия сайта или отправки письма.

stanishevsky@livejournal.com 2011

QuickSilver как минимум быстрее, чем спотлайт — особенно через полгода-год жизни системы. Кроме того, QuickSilver — замечательный лончер, учитывающий с какой вероятностью запускается та или иная программа. Вот я очень часть запускаю Chrome и Charles, причем Chrome — чаще. Для того, чтобы запустить Хром, мне достаточно вызвать этот QuickSilver (одно нажатие на клавиатуре), нажать C и Enter. Чтобы запустить Charles — соответственно, вместо C набираю CH. Я этого не просил, так сложилось само, и мне, в общем, нравится.

Ну и QuickSliver расширяется, да — можно к нему и урлы сайтов приписать, хотя мне не надо, я не пробовал.
А вот видел ли хоть кто-нибудь для мака вменяемый архиватор уровня WinRar?

Виктор 2011

Евгений. Представьте, что вы покупаете авто в базовом комплекте. За доп.опции вы получаете кондиционер, автомагнитолу… Да, они платные. И совсем мне не понятно, почему должно быть не так.

desh 2011

У меня подобная задача решена так: шорткат (Mod+F4) выдаёт в статусной строке подсказку «web: „, после ввода запускается браузер с параметром ’ %27http://yubnub.org/parser/parse?command=%22..command..%22%27 ’.

yubnub.org — сервис, написанный для контеста <<2005 „Rails Day“ 24-hour programming contest>>. Позволяет маппить алиасы и делать „команды“ которые превращаются в get-запросы. Штука весьма удобная, кстати, если бы ещё добавить авторизацию и команды на уровне пользователя.. Команды там и сейчас можно кастомные добавлять — но область видимости там только одна, модерируемая единственным разработчиком-автором по email :).

AG 2011

Наверное это работает в «Сафари», увы, в «Опере» и «Файрфоксе» это у меня не работает.

Опера свежая?

m-ivanov (m-ivanov.livejournal.com) 2011

А почему у вас там в яндексе просто не резолвятся адреса типа « http://wiki%22​?

vladon (vladon.ru) 2011

а файла hosts в маке нет?

просто же:

wiki wiki.yandex.ru

и всё

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Виктор:

Да, они платные. И совсем мне не понятно, почему должно быть не так.

Потому что под Windows не так.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для m-ivanov.livejournal.com:

А почему у вас там в яндексе просто не резолвятся адреса типа « http://wiki%22​?

Резовлятся, но не во всех режимах. В VPN, например, их нет.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для vladon.ru:

а файла hosts в маке нет?

Spotlight — это ещё и очень быстрый запуск чего-либо. У меня может быть браузер не запущен, а я в Spotlight вбиваю и не забочусь ни о чём.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для AG:

Опера свежая?

Самая последняя.

pepelsbey 2011

Правильно говорят, поставь Alfred — он бесплатный в базовой комплектации. А если очень понравится, то его легко расширить заплатив. Что касается платности-бесплатности: система — это бизнес-ланч: ты берёшь то, что притоговили для всех, поэтому получилось дёшево. А софт — это отдельные блюда, за них всегда берут деньги. Ну и вспоминается анекдот про пользователя Андроида, котрый зашёл в бар…

Евгений Степанищев (bolknote.ru) 2011

Комментарий для pepelsbey:

Я же с Windows перешёл. Там на всё есть с десяток бесплатных программ.

А что лучше —  QuickSilver или Alfred?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для desh:

У меня подобная задача решена так: шорткат (Mod+F4) выдаёт в статусной строке подсказку «web: „, после ввода запускается браузер с параметром…

В „маке“ уже есть софт для этого. Хотелось бы расширить то, что есть.

AG 2011

А не пробовали держать всё время открытый браузер и в нём открытые вкладки с нужными сайтами?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для AG:

Пробовали, неудобно.

pepelsbey 2011

Alfred лучше, ибо проще и сразу. Но тебе может понравиться QuickSilver тем, что его можно тонко настроить, да ещё и свой модуль написать.

jankkhvej (jankkhvej.blogspot.com) 2011

Комментарий для Евгения Степанищева:

А вы всё в Opera на маке сидите?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для jankkhvej.blogspot.com:

Ага.