Ich versuche derzeit, das Standard-URL-Verarbeitungsverhalten in OS X zu ändern. Ich möchte, wenn ich auf einen beliebigen Link außerhalb eines Webbrowsers klicke, diese URL in die Zwischenablage kopieren, anstatt sie beispielsweise im Standard-Webbrowser zu öffnen Wenn Sie in einer Skype-Konversation auf einen Link klicken, sollte diese URL in die Zwischenablage von OS X kopiert werden, anstatt sie in Firefox (derzeit mein Standard-Webbrowser) zu öffnen.
Ich habe über Lösungen nachgedacht, aber ich bin derzeit nicht in der Lage, eine zu implementieren. Wenn ich eine Anwendung erstellen kann, die URLs in die Zwischenablage einfügt, die an sie gesendet werden, und diese Anwendung als Standard-Webbrowser festlegen kann, wäre ich in der Lage, mein Ziel zu erreichen.
Ich habe mit Automator eine Anwendung erstellt, die den Shell-Befehl ausführt, pbcopy
und diese Anwendung als meinen Standard-Webbrowser festgelegt, aber ich habe nicht das erwartete Ergebnis erhalten. Ich habe einige Tests durchgeführt und kann bestätigen, dass die Anwendung beim Klicken auf einen Link ausgeführt wird. Ich kann jedoch die URL nicht an das Anwendungs- / Shell-Skript übergeben. Ich habe sowohl stdin als auch ein übergebenes Argument ausprobiert, aber ohne Erfolg.
Gibt es eine Möglichkeit für eine mit Automator erstellte Anwendung, eine angeklickte URL abzurufen und an zu senden pbcopy
, wenn diese Anwendung als (Standard-)Handler für URLs festgelegt ist?
Gibt es alternativ eine bessere Möglichkeit, einen gefälschten Webbrowser zu erstellen, der die Eingabe übernimmt und in die Zwischenablage legt, als Automator? Oder gibt es eine andere Möglichkeit, wie ich mein Ziel ohne eine benutzerdefinierte Anwendung / ein benutzerdefiniertes Skript erreichen kann?
Die Art und Weise, wie URLs in Mac OS X geöffnet werden, ist tatsächlich komplizierter als Sie denken. Wenn Sie auf eine URL klicken, übergibt Mac OS X dem Browser nicht nur die zu öffnende URL; Stattdessen sendet es ein Apple-Ereignis mit der ID kAEGetURL
, das die URL enthält.
Ich habe Automator nie wirklich verwendet (es ist einfach viel zu langsam und begrenzt für meine typische Verwendung), daher bin ich mir nicht sicher, aber ich bezweifle, dass es Apple Events verarbeiten kann. Daher können Sie Automator nicht verwenden, um das zu erreichen, was Sie wollen.
Sie müssen daher in Xcode auf eine normale Objective-C-App zurückgreifen.
Die zwei grundlegenden Dinge, die Sie tun müssen, sind:
Registrieren Sie Ihre App für den Empfang des kAEGetURL-Ereignisses und legen CFBundleURLTypes
Sie in der Info.plist Ihrer App fest, dass sie http
und einschließt https
.
Implementieren Sie eine Methode, die das kAEGetURL-Ereignis behandelt, und kopieren Sie die URL in die Zwischenablage.
Diese beiden Dinge sind in Objective-C relativ unkompliziert; Zur Veranschaulichung habe ich eine Beispielanwendung erstellt, die dies tut. Sie können es unter https://github.com/houbysoft/short/tree/master/Copy%20URL%20to%20Clipboard anzeigen . Die wichtigste Datei ist https://github.com/houbysoft/short/blob/master/Copy%20URL%20to%20Clipboard/Copy%20URL%20to%20Clipboard/AppDelegate.m , dort können Sie sehen, wie Sie sich für die registrieren event (dies geschieht in der Methode applicationWillFinishLaunching:) und wie es in die Zwischenablage kopiert wird (dies geschieht in der Methode getUrl:withReplyEvent:).
Wenn Sie sich faul fühlen und nur sehen möchten, ob dies funktioniert, schnappen Sie sich diese Datei , extrahieren Sie die Anwendung daraus, legen Sie sie als Standard-Webbrowser fest (öffnen Sie die Safari-Einstellungen und suchen Sie im Feld Standard-Webbrowser nach dieser App). Klicken Sie dann in Skype auf Ihren Link, und er sollte direkt in Ihre Zwischenablage kopiert werden.
Schritt 1: Open Source installieren und aktiv pflegen https://github.com/johnste/finicky . Finicky ist eine Anwendung, mit der Sie Links basierend auf von Ihnen festgelegten Regeln an verschiedene Browser weiterleiten können. Damit dies funktioniert, sollte Finicky Ihr Standardbrowser sein.
Schritt 2: Öffnen Sie den Skripteditor, fügen Sie den folgenden Code ein und speichern Sie ihn als Anwendung. Nennen wir diese eine UrlHandler.app:
on open location input
set the clipboard to input
end open location
Schritt 3: Geben Sie an, an welchen Browser Finicky standardmäßig Links senden soll. Ändern Sie in ~/.finicky.js in Schritt 2 den defaultBrowser auf die UrlHandler.app.
module.exports = {
defaultBrowser: "com.apple.ScriptEditor.id.UrlHandler",
...
Hier ist eine alternative Konfiguration, die Links nur dann an UrlHandler.app sendet, wenn Sie bei gedrückter Befehlstaste auf einen Link klicken:
module.exports = {
defaultBrowser: "Firefox",
handlers: [
{
match: ({ keys }) => keys.command,
browser: "com.apple.ScriptEditor.id.UrlHandler"
}
]
};
Pinguinrob
Dienstag