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 pbcopy
y 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?
Respuestas:
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:
registre su aplicación para recibir el evento kAEGetURL y configure la información
CFBundleURLTypes
en la lista de información de su aplicación para incluirhttp
yhttps
.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.
fuente