Cómo acceder a una URL clicada en una aplicación de controlador de URL creada en Automator

14

Actualmente estoy tratando de modificar el comportamiento predeterminado de manejo de URL en OS X. Me gustaría, al hacer clic en cualquier enlace fuera de un navegador web, copiar esta URL al tablero en lugar de abrirla en el navegador web predeterminado, por ejemplo , hacer clic en un enlace en una conversación de Skype debería copiar esta URL en el tablero de OS X en lugar de abrirla en Firefox (que actualmente es mi navegador web predeterminado).

He pensado en soluciones, pero actualmente no puedo implementar una. Si puedo crear una aplicación que coloque las URL en el tablero que se le envía, y pueda configurar esta aplicación como el navegador web predeterminado, podría lograr mi objetivo.

Creé una aplicación con Automator que ejecuta el comando de shell pbcopyy configuré esta aplicación como mi navegador web predeterminado, pero no obtuve el resultado esperado. Hice algunas pruebas y puedo confirmar que la aplicación se ejecuta al hacer clic en un enlace, sin embargo, no puedo pasar la URL a la aplicación / script de shell. Intenté ambos stdin o un argumento pasado, pero sin éxito.

¿Hay alguna forma de que una aplicación creada con Automator recupere una URL en la que se hizo clic y se la envíe pbcopy, cuando esa aplicación esté configurada como un controlador (predeterminado) para las URL?

Alternativamente, ¿hay una mejor manera de crear un navegador web falso que tome la entrada y la ponga en el tablero que Automator? ¿O hay alguna otra manera de lograr mi objetivo sin una aplicación / script personalizado?

DjDCH
fuente
No digo esto como una respuesta, ya que no es una solución completa, pero es un comienzo: utilicé rubicode.com/Software/RCDefaultApp para configurar una aplicación de automatización como el navegador predeterminado. En Automator, hay una acción para Copiar al Portapapeles. Simplemente no puedo ingresar ningún texto en una aplicación de automatización.
penguinrob
Lo mismo, pero usé Choosy. He realizado una buena cantidad de pruebas y he encontrado lo siguiente: 1) La aplicación Automator se ejecuta. 2) No parece tener ningún tipo de entrada en absoluto. 3) Ergo, cuando se envía un "enlace" a un navegador, no se envía una URL en texto sin formato. Esto debe manejarse de una manera diferente, y esa es realmente la pregunta que se busca.
Timothy Mueller-Harder

Respuestas:

13

La forma en que se abre la URL en Mac OS X es en realidad más complicada de lo que parece. Cuando hace clic en una URL, Mac OS X no solo pasa al navegador la URL para abrir; en su lugar, le envía un evento de Apple, con la ID kAEGetURL, que contiene la URL.

Realmente nunca usé Automator (es demasiado lento y limitado para mi uso típico), por lo que no estoy seguro de esto, pero dudo que tenga la capacidad de manejar eventos de Apple. Por lo tanto, no podrá utilizar Automator para lograr lo que desea.

Por lo tanto, tendrá que recurrir a una aplicación Objective-C normal en Xcode.

Las dos cosas básicas que debe hacer son:

  1. registre su aplicación para recibir el evento kAEGetURL y configure la información CFBundleURLTypesen la lista de información de su aplicación para incluir httpy https.

  2. Implemente un método que maneje el evento kAEGetURL y haga que copie la URL en el portapapeles.

Estas dos cosas son relativamente sencillas de hacer en Objective-C; Para ilustrar, he creado una aplicación de muestra que hace esto. Puede verlo en https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard . El archivo más importante es https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , allí puede ver cómo registrarse para el evento (esto se hace en el método applicationWillFinishLaunching:) y cómo copiarlo en el portapapeles (esto se hace en el método getUrl: withReplyEvent:).

Si se siente flojo y solo quiere ver que esto funciona, tome este archivo , extraiga la aplicación, configúrelo como el navegador web predeterminado (abra las Preferencias de Safari y busque esa aplicación en el campo del navegador web predeterminado). Luego haga clic en su enlace en Skype, y debe copiarse directamente a su portapapeles.

houbysoft
fuente
Gracias por su respuesta. No sabía cómo procedía la URL en OSX. He echado un vistazo a su código, pero no conozco mucho Objective-C. Pero, su aplicación resultante funciona como un encanto y eso es lo que quería desde el principio. ¡Gracias de nuevo!
DjDCH
Buen trabajo en la aplicación (let). Me encantaría otorgar la recompensa, pero me falta algo de información definitiva sobre la pregunta si Automator puede (o no) ser obligado a reconocer un evento kAEGetURL para hacer eso.
kopischke
@kopischke: Acabo de buscar en la ayuda de Automator cualquier mención de los eventos de Apple, y no se encontró nada. Creo que es justo asumir que Automator no es compatible con esto.
houbysoft
Es posible hacer esto con AppleScript, que sería la forma "lógica" de extender un flujo de trabajo de Automator, sin profundizar en XCode / ObjC y compilar su propia aplicación. (No es que sea tan complicado, pero es probable que AppleScript sea más fácil).
Ocodo
Esto no parece funcionar en 10.11. "/ Aplicaciones / Copiar URL a Clipboard.app no ​​está disponible como navegador HTTP"
TJ Luoma