![]() |
МакЦентр: Apple компьютеры, iPod, полиграфическое оборудование, новости, обзоры, новинки мира Mac
Кулинарная книга для правого клика [ 18 октября, 2007 г ]
Обзор утилиты OnMyCommand (часть первая)
|
Обзор утилиты OnMyCommand - универсального решения для строительства персонального контекстного меню в Mac OS X.
Контекстное меню Mac OS X несовершенно. Наглухо «вшитое» даже в самый красочный и концептуальный интерфейс, оно никогда не будет соответствовать запросам всех пользователей, хотя бы потому, что все мы преследуем свои собственные задачи и располагаем индивидуальными подходами для их решения.
Повсеместное развитие персонализации в каждой новой версии Mac OS X до сих пор никак не отразилось на этом достаточно важном элементе интерфейса - ни в специальном разделе системных настроек, ни в CMI-менеджере, ни в каком-либо другом виде. Контекстное меню Automator не в счет - у него другие, тоже несомненно полезные задачи.
Частично этот вопрос решен на стороне. Сторонними разработчиками создано множество плагинов, которые дополняют контекстное меню новыми специализированными пунктами. Однако даже среди такого количества предложений трудно найти команду, работающую в точности так, как нам нужно. Кроме того, подобный тюнинг контекстного меню имеет ряд недостатков:
Нерушимый беспорядок. Все плагины создаются разными программистами, каждый из которых сам выбирает для своего детища лучшее, на его взгляд, место в контекстном меню. Новый пункт может разместиться в конце или в середине меню, смешаться с остальными пунктами или в одиночестве занимать целую секцию - все это никак не зависит от пользователя и его желаний.
Неудобная настройка. Здесь также все диктуется разработчиком. Он может вывести параметры плагина в новый пульт системных настроек, создать для этих нужд отдельную утилиту или же вовсе отказать пользователю в возможности регулировать работу своей программы.
Закрытый исходный код. Невозможность редактирования скрипта плагина под себя. Также многие пункты не подвергаются русификации и остаются с английскими заголовками, которые так некрасиво смотрятся в локализованном интерфейсе.
Хорошей альтернативой всем индивидуальным плагинам может стать утилита, позволяющая дополнять системное контекстное меню любым количеством новых пунктов, размещать в нужном порядке и тонко настраивать работу каждого из них. Данный обзор целиком посвящен только одной программе, которая была отобрана автором из нескольких CM-инструментов как наиболее универсальная.
OnMyCommand от компании Abracode - это совершенно уникальное решение для гибкого и прозрачного управления персональным контекстным меню для Finder и других приложений. Утилита представляет собой CMI-плагин, который настраивается в реальном времени в отдельной программе.
OnMyCommand позволяет назначать каждому пункту меню скрипты UNIX или AppleScript, а также великое множество параметров работы. Те, кого пугают слова «скрипт» и «UNIX», могут успокоиться - для создания элементарных команд не потребуется никаких сверхъестественных навыков. Впрочем, они не помешают при разработке более сложных, более «персональных» контекстных пунктов. Однако обо всем по порядку.
Самое первое и приятное, о чем хочется сказать - утилита бесплатная.
В дистрибутив, помимо лаконичной справочной документации, входит CMI-плагин, скрипт-инсталлятор, размещающий его в пользовательской библиотеке в папке Contextual Menu Items (для тех, кому лень делать это вручную), небольшой набор примеров и редактор OMCEdit, в котором, собственно, и будет происходить создание и настройка нового контекстного меню. Также здесь имеется утилита DropletBuilder, но с ней разберемся позже.
После установки плагина и перезагрузки Finder запускаем OMCEdit. Главное окно программы, на первый взгляд, выглядит очень скромно, особенно, если учесть, что в нем пока нет ни одной команды. Чтобы начать работать, нам просто необходимо иметь перед глазами хотя бы несколько готовых примеров. Можно установить маленькую горстку команд из дистрибутива или же воспользоваться кнопкой Download Commands, которая отобразит список всех доступных команд с сайта разработчика.
Окно редактора OMCEdit:
![]() |
Здесь нас ждет второй приятный сюрприз. Со времени первой публикации OnMyCommand в 2002 году в общем фонде накопилось более 500 команд, созданных и размещенных благодарными пользователями. Рассматривать их индивидуально не хватит ни времени, ни терпения, поэтому копаться в этой груде разношерстных скриптов предстоит каждому самостоятельно. Вполне может оказаться, что после длительного отбора останется всего с десяток полезных и нужных именно вам команд. Мы же используем лишь некоторые примеры, которые помогут разобраться в общих принципах построения пунктов в OMCEdit.
После загрузки всех доступных команд в редактор, можно сразу же щелкнуть правой кнопкой по рабочему столу и поинтересоваться состоянием нашего драгоценного контекстного меню.
533 готовые команды в подарок начинающим:
![]() |
![]() |
Полтысячи команд уже добавлены в меню и готовы к использованию. Не будем ручаться за стопроцентную работоспособность и пользу каждой из них - все же они были написаны в разное время на разных машинах, разными людьми и для разных целей. Некоторые уже устарели. По крайней мере, можно быть уверенными в стопроцентной безвредности этих скриптов, так как перед публикацией они проверялись. Единственный способ узнать, что скрывается под всеми этими пунктами - сидеть и щелкать по ним курсором.
Когда баловство с гигантским меню надоест, вернемся в редактор OMCEdit. Здесь нас ждет немало труда - нужно превратить свое детище в удобный и практичный инструмент, с которым будет приятно работать.
Щелкнув два раза по команде, можно просмотреть ее вложенный скрипт и другие параметры. На данном этапе нас больше всего интересуют два текстовых поля: Notes и Command. Первое содержит краткое описание пункта, второе - непосредственно его команду.
Abra-code-abra: пример бесполезной команды:
![]() |
Команда abra-code-abra в действии: портрет заклинателя контекстного меню
![]() |
Обнаружив «пустышку» или бесполезную для себя утилиту, вы можете закрыть окно редактирования и убрать галочку в общем списке. Команда будет отключена. В дальнейшем все деактивированные команды лучше совсем удалить, чтобы они не мешали сортировке оставшихся пунктов.
Итак, все команды прошли искусственный отбор, и в нашем списке остались только самые полезные представители вида. Под «полезными» мы подразумеваем не обязательно команды, которые полностью соответствуют нашим пожеланиями. Это могут быть даже те образцы, которые можно слегка изменить и подстроить «под себя». Ведь OMCEdit - это прежде всего редактор, а потом менеджер.
В качестве самого простого примера рассмотрим команду Search on MacUpdate, которая позволяет выделить название программы в тексте, а затем быстро найти ее в каталоге софта на сайте macupdate.com. Она имеет два ключевых свойства:
Activation Mode: Selected or Clipboard Text. Параметр указывает на то, что данный пункт контекстного меню будет отображаться, только если щелчок правой кнопкой выполнен на фрагменте выделенного текста, или когда в буфере обмена содержится текст.
open http://macupdate.com/__OBJ_TEXT__
Элементарная команда, открывающая URL в браузере. Здесь используется объект __OBJ_TEXT__, который подставляет в адрес выделенный текст.
Команда Search on MacUpdate:
![]() |
Отредактируем эти свойства. Для того, чтобы пункт активировался только в случае с выделенным текстом, поменяем значение параметра Activation Mode на Selected Text. Вместо англоязычного Macupdate мы можем использовать русский каталог программ на МакЦентре, изменив адрес в поле Command на:
open http://maccentre.ru/soft/softlist.phtml?q=__OBJ_TEXT__
Теперь переименуем наш пункт и назначим ему новое место в меню. Параметр Location позволяет выбрать размещение команды в корневом меню First Level, в специальном подменю On My Command или создать Submenu с любым другим именем.
Новая команда «Искать в МакЦентре» размещается в подменю «Текст»:
![]() |
Проверим новый пункт в деле. Для удобства можно временно убрать галочки напротив других команд в списке OMCEdit, чтобы они не мешали тестированию. Выделив интересующее название в тексте, кликаем по нему правой кнопкой. Внизу родного контекстного меню данного приложения появилась новая секция с подкатегорией Текст, которую мы создали. В ней лежит наша команда.
Поиск выделенного слова в каталоге программ МакЦентра:
![]() |
Для следующего примера возьмем очень хорошую команду с названием Add timestamp to filename. Она выполняет скрипт, который добавляет текущее время к имени файла или папки. Заглянем в ее параметры:
Activation Mode: File or Folder. Данное значение указывает на то, что пункт будет доступен при щелчке правой кнопкой на файле или папке. Команда также активируется при щелчке между значками в любой папке Finder или же на рабочем столе, так как, по сути, он тоже является папкой.
Command. Здесь мы видим скрипт, который добавляет текущую дату и время по шаблону:
"__%Y-%m-%d_%H-%M"
Команда Add timestamp to filename:
![]() |
Чем же эта команда нас не устраивает? Во-первых, метод активации File or Folder не совсем правильно подходит для данной ситуации. Если мы запустим команду, щелкнув случайно между значками на рабочем столе, то невольно изменим имя папки user/desktop, о чем будет свидетельствовать исчезновение всех значков с декстопа. Для того, чтобы предотвратить такие казусы, поменяем значение параметра Activation Mode на File or Folder (Not Finder Window). Теперь пункт будет отображаться только в случае клика непосредственно на файле или папке, но не в окне Finder.
Также можно заметить, что формат даты, который используется в скрипте, отличается от привычного нам европейского. Это легко решается небольшой рокировкой переменных:
"__%d-%m-%Y_%H-%M"
Поработав с командой некоторое время, вы можете выявить еще один недостаток. Скрипт не выполняется при щелчке на файлах и папках, имена которых содержат пробелы. Автор статьи посвятил некоторое время решению данной проблемы и выяснил, что происходит это из-за неверно выбранной формы выхода из скрипта в выпадающем меню Escape Special Characters. Следует поменять ее значение на None.
Остается придумать новое имя и место для нашего пункта, после чего мы получаем еще одну персональную команду для контекстного меню Finder.
Новая команда «Добавить дату и время к имени»:
![]() |
![]() |
Каждый сознательный пользователь хранит на своем диске дистрибутивы загруженных приложений. Сейчас мы создадим новый пункт, который позволит быстро переносить такие файлы в отдельную папку.
В качестве шаблона используем существующую команду Move to Installers. Открыв ее в редакторе, мы увидим очень простой сценарий, который перемещает объект в подкаталог Installers. Значок «~» в данном случае обозначает пользовательскую домашнюю папку.
Команда Move to Installers:
![]() |
Очевидно, что персонализацию данной команды следует начать с изменения пути к существующей папке. Как и в прошлом примере, здесь также отсутствует условие активации Not Finder Window, из-за чего пункт, предназначенный для файлов, будет отображаться при щелчке между значками. Сделав эти два изменения, вы можете пользоваться командой. Однако попробуем настроить ее еще более тонко.
Как правило, все загруженные из сети дистрибутивы имеют вид образов или архивов. В основном это форматы DMG, PKG и ZIP, реже встречаются SIT, RAR и прочие типы. Редактор OMCEdit позволяет активировать тот или иной пункт в зависимости от расширения файла, по которому выполнен правый клик. В нижней части окна есть секция вкладок, содержащих множество дополнительных параметров. В данном случае, нас интересует вкладка Files. Здесь расположен список Extensions, в который мы добавляем нужные расширения.
Использование фильтра по расширениям:
![]() |
Новая команда «Переместить в дистрибутивы» работает только с нужными файлами:
![]() |
![]() |
Теперь пункт отображается только при щелчке по файлам указанных типов и не активен с другими расширениями.
Подобную команду хорошо использовать и при инсталляции новых программ. Многие DMG-образы, содержащие в себе приложение, не имеют вложенного ярлыка на папку Applications. Чтобы быстро переносить программы в эту папку, можно создать аналогичную команду, которая будет действовать при щелчке на пакетах с расширением APP. Это совсем нетрудно сделать на основе рассмотренного нами примера.
***
Мы изучили базовые элементы настройки команд в редакторе OMCEdit. Самые нетерпеливые уже могут начинать готовить свое меню - искать новые ингредиенты, нарезать скрипты и делать изысканные блюда по своему личному вкусу. Во второй части обзора будут рассмотрены другие, более интересные рецепты, которые пригодятся начинающему кулинару. До этого мы занимались только тем, что редактировали готовые команды, далее попробуем создавать собственные контекстные пункты по тому легкому и логичному методу, который предлагает нам OnMyCommand.