Globale Tastenkombination zum Öffnen einer Registerkarte in Chrome unter Mac OS X.

7

Was ist der beste Weg, um eine globale Tastenkombination zum Öffnen einer Registerkarte in Chrome unter Mac OS X zu konfigurieren?

Vorsichtsmaßnahmen

  • Es sollte so einfach wie möglich sein, also möchte ich nicht jedes Mal <alt><tab>+ <cmd><t>.
  • Dies muss global sein . Wenn ich also <cmd><return>in Mail.app auf meine Verknüpfung drücke (was zufällig der Fall ist ), muss Chrome nach vorne gebracht und ein neuer Tab geöffnet werden
  • Es muss die neue Registerkarte öffnen, dh chrome://newtabkeine Website wiehttp://www.google.com
  • Die höchste Priorität ist, dass es schnell und schnell geöffnet wird. Die nächste Priorität ist die einfache Konfiguration

Aktuelle Lösung

Im Moment habe ich Quicksilver.app so konfiguriert, dass das folgende AppleScript (oder genauer gesagt Osascript ) ausgeführt wird, wenn ich drücke <cmd><return>:

#!/usr/bin/osascript

tell application "Google Chrome Canary"
    activate
end tell

tell application "System Events"
    tell process "Google Chrome Canary"
        tell menu bar 1
            tell menu bar item "File"
                tell menu "File"
                    click menu item "New Tab"
                end tell
            end tell
        end tell
    end tell
end tell

Das Problem dabei ist, dass es bis zu 5 Sekunden dauern kann, wenn es eine Weile her ist, seit ich es zuletzt ausgeführt habe. Ich hatte dies in eine * .app umgewandelt, aber das war langsamer als es zu einer ausführbaren Datei zu machen osascript. Ich habe keine Angst davor, eine kompilierte Version des obigen Skripts zu entwickeln, aber ich bin ein UNIX / Web-Entwickler, kein OS X, und ich bin mit dem System nicht vertraut.

Aaron
quelle
Platzieren Sie dieses Skript in ~/Library/Scriptsund aktivieren Sie den Menüpunkt "Skripte" in den Einstellungen des AppleScript-Editors. Verwenden Sie es eine Weile nicht und rufen Sie es dann über dieses Menü auf. Ich fürchte, die Verzögerung ist damit verbunden, dass AppleScript geladen werden muss, und dies ist die "reinste" Lösung, die ich mir vorstellen kann (außer das Aufrufen der Skriptanwendung direkt vom Finder aus), um die Ursachen einzugrenzen.
Daniel Beck

Antworten:

6

Sie können den folgenden Terminal-Befehl ausführen (z. B. in einem Bash-Skript):

open -a "Google Chrome" chrome://newtab

Dies führt dazu, dass die Anwendung Google Chrome die URL chrome: // newtab öffnet und dadurch einen neuen Tab öffnet.

Leider registriert Google Chrome den chrome://URL-Typ nicht bei Launch Services und es wird angenommen, dass dies ein Dateipfad ist.

Um dies zu beheben, klicken Sie mit der rechten Maustaste auf das Anwendungspaket von Google Chrome, wählen Sie Paketinhalt anzeigen , öffnen Sie das Inhaltsverzeichnis und bearbeiten Sie es Info.plistin einem Texteditor.

Suche nach CFBundleURLTypes. Bearbeiten Sie die folgenden Zeilen, um die durch a gekennzeichneten Zeilen hinzuzufügen +:

<key>CFBundleURLTypes</key>
<array>
+   <dict>
+       <key>CFBundleURLName</key>
+       <string>Chrome Internal URLs</string>
+       <key>CFBundleURLSchemes</key>
+       <array>
+           <string>chrome</string>
+       </array>
+   </dict>
    <dict>
        <key>CFBundleURLName</key>
        <string>Web site URL</string>

Speichern und schließen. Verschieben Sie das Anwendungspaket von Google Chrome in ein anderes Verzeichnis und wieder zurück, damit Launch Services die Änderung übernimmt (wenn dies nicht funktioniert, melden Sie sich ab und wieder an).

Führen Sie dann openwie am Anfang beschrieben aus.


Sobald dies funktioniert, können Sie am besten ein Shell-Skript ausführen, das den openBefehl ausführt , der wiederum z. B. von Ihrem Launcher aufgerufen wird. Da ich glaube, dass die Verzögerung durch das osascriptLaden verursacht wird , sollte so ziemlich jede Lösung, die Sie hier wählen, schnell genug sein.


Um die Bearbeitung der Info.plistDatei halbautomatisch zu gestalten (Sie müssen dies für alle Chrome-Updates wiederholen), können Sie sie PlistBuddyin Terminal verwenden. Erstellen Sie zunächst eine Datei chrome-url.plistmit dem folgenden Namen:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>Chrome Internal URLs</string>
    <key>CFBundleURLSchemes</key>
    <array>
        <string>chrome</string>
    </array>
    </dict>
</array>
</plist>

Anschließend können Sie Chrome wie folgt patchen Info.plist:

/usr/libexec/PlistBuddy -c "Merge '/path/to/chrome-url.plist' :CFBundleURLTypes" /Applications/Google\ Chrome.app/Contents/Info.plist

Daniel Beck
quelle
Sie müssen die Bearbeitung der Info.plistDatei für jede Chrome-Version wiederholen .
Daniel Beck
Chrome überschreibt die Info.plist-Datei weiterhin mit dem Original, sodass die Ergänzungen zu den URLTypes weggeworfen werden. Irgendwelche Ideen, wie ich das dauerhafter machen könnte? Vielen Dank.
Aaron
@aaron Sperren Sie diese Datei und / oder entfernen Sie die Berechtigungen zum Bearbeiten von Ihrem Benutzer.
Daniel Beck
Haben Sie eine Idee, ob dies andere Probleme verursachen wird (z. B. das Nicht-Speichern von Einstellungen)?
Aaron
@ aaron-Einstellungen werden nicht im Anwendungspaket gespeichert, da sie für jeden Benutzer privat sind und Mac OS X ein Mehrbenutzersystem ist. Ich gehe davon aus, dass dies das Ergebnis einer regelmäßigen Integritätsprüfung der eigentlichen Chrome-Anwendung selbst ist, ähnlich wie Windows-Anforderungen (angefordert?) Sie den Datenträger zur Reparatur des Systems einlegen, wenn Sie Dateien löschen, die Sie nicht hätten löschen sollen. Es ist durchaus üblich, dass Benutzer unter Mac OS X keine Berechtigung zum Schreiben in Anwendungen in haben /Applications.
Daniel Beck
5

Chrome unterstützt jetzt integrierte globale Verknüpfungen, und ich habe die globale Verknüpfungserweiterung für neue Registerkarten erstellt , um sie zu nutzen.

Installieren Sie es, weisen Sie eine Verknüpfung zu und setzen Sie den Bereich auf Global, und Sie erhalten superschnellen Zugriff auf die OmniBar.

w00t
quelle
1

Sie müssen Chrome nicht ständig ändern, wenn Sie AppleEvent direkt eine "Get URL" senden. Benutze das:

tell application "Google Chrome"
    open location "chrome://newtab"
end tell
LaC
quelle
Dies ist gut, obwohl das Leistungsproblem anscheinend hauptsächlich durch die Verwendung von AppleScript / Osascript verursacht wurde. Ich schätze den Tipp!
Aaron
Verwenden Sie dann Python mit Appscript.
LaC
Python verpackt nur Applescript, oder? Ich sehe nicht, wie dies die Leistung verbessern würde
Aaron
@ Aaron Es nicht. Sowohl py-appscript als auch rb-appscript leiden ebenfalls unter dieser Verzögerung, wenn sie zum ersten Mal ausgeführt werden. Das Auswählen von Menüelementen (und anderen Systemereignisaufrufen) kann sogar langsamer sein als in AppleScript.
Lri
0

Eine Möglichkeit, dies zu tun, ist über einen Automator-Service:

  1. Erstellen Sie ein neues Automator-Dokument "Service".
  2. Ändern Sie den Eingabetyp in "keine Eingabe". ("Dienst erhält keine Eingabe")
  3. Ziehen Sie die Aktion "AppleScript ausführen" in das Automator-Skript.
  4. Fügen Sie das folgende Skript ein.
  5. Speichern Sie das Skript als z. B. "Focus New Chrome Tab".
  6. Öffnen Sie den Bereich "Tastatur" in den Systemeinstellungen.
  7. Wählen Sie die Registerkarte "Verknüpfungen" und dann "Dienste".
  8. Suchen Sie in der Liste der Dienste nach "Focus New Chrome Tab".
  9. Aktivieren Sie es und fügen Sie eine Tastenkombination für "Focus New Chrome Tab" hinzu.

Testen Sie, indem Sie zu z. B. iTunes wechseln und das Menü "iTunes | Dienste" öffnen. "Focus New Chrome Tab" sollte zusammen mit der von Ihnen ausgewählten Tastenkombination aufgeführt sein. Wenn Sie auf die Tastenkombination klicken, wird eine neue Chrome-Registerkarte angezeigt.

[Beachten Sie, dass es einen Fehler gibt, dass Sie, bevor die "globale" Tastenkombination in einer bestimmten Anwendung funktioniert, das Menü "Dienste" öffnen müssen, was die Verwendung im Moment etwas ärgerlich macht.]

Skript zum Hinzufügen in Schritt (4):

tell application "Google Chrome"
    open location "chrome://newtab"
    activate
end tell
mjs
quelle