Когда я не понимаю, откуда в системе берутся какие-либо вещи, мне становится неуютно, и я начинаю разбираться. Например, меня заинтересовало, почему при нажатии Secondary Click в Finder на файле появляются какие-либо нестандартные действия, например, “Send File To Rapidshare”:
Начинаю искать. Все подобные вещи обычно находятся в иерархии каталогов Library, либо в пользовательской (~/Library), либо общесистемной (/Library). Магических вещей в Mac OS X не бывает, и всё описано где-то в каталогах, обрабатываемых системой. Просматриваю сначала пользовательские каталоги.
Конечно же, за меню отвечают плагины, располагающиеся в ~/Library/Contextual Menu Items и /Library/Contextual Menu Items. В пользовательском есть только плагин Dropbox:
Теперь системный:
Да, Speed Download Contextual Menu.plugin подходит под Rapidshare, смотрим его (Secondary Click и Show Package Context):
Cmd+I (Get Info) на файле “Speed Download Contextual Menu” в Contents/MacOS показывает полный путь к нему и тип (бинарник):
Бинарным файлом нас не испугать. Заходим в Terminal.app, переходим в каталог, где находится нужный файл (путь содержит пробелы, поэтому берём его в кавычки):
$ cd "/Library/Contextual Menu Items/Speed Download Contextual Menu.plugin/Contents/MacOS"
Для того, чтобы убедиться, что это действительно бинарный файл, смотрим его тип:
$ file Speed\ Download\ Contextual\ Menu Speed Download Contextual Menu: Mach-O universal binary with 2 architectures Speed Download Contextual Menu (for architecture i386): Mach-O bundle i386 Speed Download Contextual Menu (for architecture ppc): Mach-O bundle ppc
Извлекаем строки:
$ strings Speed\ Download\ Contextual\ Menu com.yazsoft.SpeedDownload com.yazsoft.speeddownload.contextprefschange contextshowuploadmenu advanced_mode com.yazsoft.speeddownload.contextualmenu kUploadNamedToRapidShare kUploadMultipleToRapidShare /Applications/Speed Download 5/Speed Download.app /Applications/Speed Download/Speed Download.app /Applications/Speed Download Lite/Speed Download Lite.app /Applications/Speed Download 4/Speed Download.app /Applications/Speed Download.app last location
Жирным я выделил то, что очень похоже на пункты меню. Программы Mac OS X используют файл ресурсов для локализации строковых значений:
$ cd "/Library/Contextual Menu Items/Speed Download Contextual Menu.plugin/Contents/Resources/English.lproj"
Можно открыть ресурс в XCode (если он установлен):
$ open Localizable.strings
Но это обычный файл, поэтому можно просмотреть обычным cat:
$ cat Localizable.strings /* Localizable.strings XSpeedDownload Mach-O Created by Frederick Cheung on 08/11/2008. Copyright 2008 Frederick Cheung. All rights reserved. */ kUploadNamedToRapidShare = "Send \"%@\" to RapidShare"; kUploadMultipleToRapidShare = "Send %ld items to RapidShare";
Вот мы и нашли, откуда взялась строка “Send File to RapidShare”.
Для пробы я решил удалить плагин и найти, где он ещё описан. При очередном запуске Speed Downloader сказал, что нужно восстановить кое-какие компоненты, имея в виду удалённый мною плагин. fseventer – очень полезная программа:
Он натолкнул меня на файл с кешем сервисов ~/Library/Caches/com.apple.nsservicescache.plist:
Теперь понятно, откуда берётся строка меню и где находится кеш сервисов.