Como acessar um URL clicado em um aplicativo manipulador de URL criado no Automator

14

Atualmente, estou tentando modificar o comportamento de manipulação de URL padrão no OS X. Gostaria de, ao clicar em qualquer link fora de um navegador da Web, copiar esse URL na área de transferência em vez de abri-lo no navegador da Web padrão - por exemplo , clicar em um link em uma conversa do Skype deve copiar esse URL para a área de transferência do OS X em vez de abri-lo no Firefox (que atualmente é o meu navegador da web padrão).

Pensei em soluções, mas atualmente não consigo implementar uma. Se eu puder criar um aplicativo que coloque URLs na área de transferência que é enviada para ele e definir esse aplicativo como o navegador da Web padrão, eu seria capaz de atingir meu objetivo.

Criei um aplicativo com o Automator que executa o comando shell pbcopye o defini como meu navegador da web padrão, mas não obtive o resultado esperado. Fiz alguns testes e posso confirmar que o aplicativo é executado ao clicar em um link, no entanto, não consigo passar o URL para o aplicativo / shell script. Tentei stdin ou um argumento aprovado, mas sem sucesso.

Existe uma maneira de um aplicativo criado com o Automator recuperar um URL clicado e enviá-lo para pbcopy, quando esse aplicativo estiver definido como um manipulador (padrão) para URLs?

Como alternativa, existe uma maneira melhor de criar um navegador da Web falso que pegue a entrada e a coloque na área de trabalho do que o Automator? Ou existe alguma outra maneira de atingir meu objetivo sem um aplicativo / script personalizado?

DjDCH
fonte
Não colocando isso como resposta, já que não é uma solução completa, mas é um começo - usei rubicode.com/Software/RCDefaultApp para definir um aplicativo de automação como o navegador padrão. No Automator, há uma ação para Copiar para a área de transferência. Eu simplesmente não consigo obter nenhuma entrada de texto para um aplicativo de automação.
penguinrob
Idem, mas eu usei Choosy. Fiz vários testes e encontrei o seguinte: 1) O aplicativo Automator é executado. 2) Não parece receber nenhum tipo de entrada. 3) Logo, quando um navegador recebe um "link", ele não recebe um URL em texto sem formatação. Isso deve ser tratado de uma maneira diferente, e é exatamente isso que a pergunta é depois.
Timothy Mueller-Harder

Respostas:

13

A maneira como a abertura de URL no Mac OS X é realmente mais complicada do que você imagina. Quando você clica em um URL, o Mac OS X não passa apenas o navegador para o URL a ser aberto; em vez disso, ele envia um evento da Apple, com o ID kAEGetURL, contendo o URL.

Eu realmente nunca usei o Automator (é muito lento e limitado para o meu uso típico), então não tenho certeza disso, mas duvido que ele seja capaz de lidar com os Eventos da Apple. Portanto, você não poderá usar o Automator para alcançar o que deseja.

Portanto, você terá que recorrer a um aplicativo Objective-C normal no Xcode.

As duas coisas básicas que você precisa fazer são:

  1. registre seu aplicativo para receber o evento kAEGetURL e defina o CFBundleURLTypesInfo.plist do aplicativo para incluir httpe https.

  2. Implemente um método que manipule o evento kAEGetURL e faça-o copiar o URL para a área de transferência.

Essas duas coisas são relativamente diretas no Objective-C; para ilustrar, eu criei um aplicativo de amostra que faz isso. É possível vê-lo em https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . O arquivo mais importante é https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , você pode ver como se registrar no evento (isso é feito no método applicationWillFinishLaunching:) e como copiá-lo para a área de transferência (isso é feito no método getUrl: withReplyEvent:).

Se você estiver com preguiça e apenas quiser ver como isso funciona, pegue esse arquivo , extraia o aplicativo e defina-o como o navegador da web padrão (abra as Preferências do Safari e procure o aplicativo no campo Navegador da web padrão). Em seguida, clique no seu link no Skype e ele deverá ser copiado diretamente para a área de transferência.

houbysoft
fonte
Obrigado pela sua resposta. Eu não sabia como o URL era procedido no OSX. Dei uma olhada no seu código, mas não conheço muito o Objective-C. Mas, seu aplicativo resultante funciona como um encanto e é o que eu queria desde o início. Obrigado novamente!
DjDCH
Bom trabalho no aplicativo (let). Eu adoraria conceder a recompensa, mas estou perdendo algumas informações definitivas sobre a questão se o Automator puder (ou não puder) ser coagido a reconhecer um evento kAEGetURL para fazer isso.
Kopischke
@kopischke: Acabei de procurar na ajuda do Automator qualquer menção a eventos da Apple, e nada foi encontrado. Eu acho que é justo supor que o Automator não suporta isso.
houbysoft
É possível fazer isso com AppleScript, que seria a maneira "lógica" de estender um fluxo de trabalho do Automator, sem se aprofundar no XCode / ObjC e compilar seu próprio aplicativo. (não que é tudo tão complicado, mas é provável AppleScript seria mais fácil.)
ocodo
Isso não parece funcionar no 10.11. "/ Applications / Copy URL to Clipboard.app não está disponível como um navegador HTTP"
TJ Luoma