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 pbcopy
e 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?
fonte
Respostas:
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:
registre seu aplicativo para receber o evento kAEGetURL e defina o
CFBundleURLTypes
Info.plist do aplicativo para incluirhttp
ehttps
.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.
fonte