2012-12-16 1 views
3

Я пытаюсь написать простое приложение AppleScript, которое обрабатывает URL-адреса sftp: // и sshfs: // на моем Mac. Основываясь на хорошем guide on how to create a custom URL handler app in AppleScript, я написал a small app следующим образом, и он хорошо работает, когда я нажимаю на URL-адрес с соответствующими схемами. Фактическая работа выполняется в отдельном сценарии оболочки, который вызывает sshfs (FUSE), и я использую AppleScript, чтобы связать его с ОС.Правильный обработчик в AppleScript для ответа на «открытую» команду Unix для настраиваемого апплета URL-адреса

on open location theURL 
    set cmd to (quoted form of (get POSIX path of (path to resource "sshfs.sh" in directory "Scripts"))) & " " & theUrl 
    do shell script cmd 
end open location 

Однако этот обработчик URL AppleScript приложение не работает, если я использую команду open из терминала, например,

open sftp://host/path 

Я пытался добавить другие обработчики и нашел в командной строке путь вызывает обработчик on run argv вместо того, который я написал, но не могу понять, как получить доступ к переданному аргументу URL. Я могу правильно получить URL-адрес, когда скрипт вызывается напрямую, например, osascript my.applescript sftp://host/path. Пробовал ASObjC Runner, но не помог.

Существует ли стандартный обработчик или метод в приложении AppleScript для приема аргументов, переданных командой Unix open? Кажется, он полагается на AppleEvents, но я не могу найти хорошую ссылку, описывающую, как играть одну и ту же магию между командой и родными приложениями с помощью AppleScript.

ответ

0

Почему бы просто не обработать его в вашем «на рабочем столе»? Что-то вроде этого ...

on run argv 
    set theArg to item 1 of argv 
    if theArg starts with "sftp://" then 
     open location theArg 
    else 
     -- do the normal applescript code 
    end if 
end run 

Или вы говорите, что команда «open» unix не передает аргумент?

+0

Спасибо за ответ, но это было именно то, что я пробовал. «Argv» для обработчика запуска устанавливается как «текущее приложение» каким-то образом, когда я использую «открытую» команду unix, поэтому «item 1 of argv» дает ошибку. Это список строк, хотя, когда я вызываю непосредственно с osascript. Странно, не так ли? – netj