Actualmente estoy tratando de modificar el comportamiento de manejo de URL predeterminado en OS X. Me gustaría, al hacer clic en cualquier enlace fuera de un navegador web, copiar esta URL en el área de trabajo 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 abrirlo 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 área de trabajo que se le envían, y puedo 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. Probé tanto stdin como 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 la envíe a 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 coloque en la mesa de trabajo que Automator? ¿O hay alguna otra forma de lograr mi objetivo sin una aplicación/secuencia de comandos personalizada?
La forma en que se abre la URL en Mac OS X es en realidad más complicada de lo que piensas. 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 el ID kAEGetURL
, que contiene la URL.
Realmente nunca usé Automator (es demasiado lento y limitado para mi uso típico), así que no estoy seguro de esto, pero dudo que tenga la capacidad de manejar Apple Events. Por lo tanto, no podrá usar 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 debes hacer son:
registre su aplicación para recibir el evento kAEGetURL y configure el CFBundleURLTypes
Info.plist de su aplicación para incluir http
y https
.
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 perezoso y solo quiere ver que esto funciona, tome este archivo , extraiga la aplicación de él, configúrelo como el navegador web predeterminado (abra Preferencias de Safari y busque esa aplicación en el campo Navegador web predeterminado). Luego haga clic en su enlace en Skype, y debería copiarse directamente en su portapapeles.
Paso 1: instale el código abierto y mantenga activamente https://github.com/johnste/finicky . Finicky es una aplicación que le permite enrutar enlaces a diferentes navegadores según las reglas que especifique. Para que esto funcione, Finicky debe ser su navegador predeterminado.
Paso 2: Abra el Editor de secuencias de comandos, pegue el siguiente código y guárdelo como una aplicación. Llamemos a este UrlHandler.app:
on open location input
set the clipboard to input
end open location
Paso 3: especifica a qué navegador Finicky debe enviar los enlaces de forma predeterminada. En ~/.finicky.js, cambie el navegador predeterminado a UrlHandler.app en el paso 2.
module.exports = {
defaultBrowser: "com.apple.ScriptEditor.id.UrlHandler",
...
Aquí hay una configuración alternativa que envía enlaces a UrlHandler.app solo cuando se hace clic con el botón Comando en un enlace:
module.exports = {
defaultBrowser: "Firefox",
handlers: [
{
match: ({ keys }) => keys.command,
browser: "com.apple.ScriptEditor.id.UrlHandler"
}
]
};
pingüinorob
martes