Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Tutorial: Touch Bar Erweiterungen ohne Zusatztools

Tutorial: Touch Bar Erweiterungen ohne Zusatztools

Caliguvara
Caliguvara10.12.1915:28
Hallo zusammen,

Heute morgen habe ich mir durch Unachtsamkeit mein BetterTouchTool Preset zerschossen (Champion, der Tag fing gut an). Es lauft jetzt alles wieder, ich habe mir aber mal Gedanken dazu gemacht, wie man denn einige Funktionen auch mit Hilfe von Bordmitteln erreichen kann. Und habe mal etwas mit den "Erweiterungen" für die Touch Bar gespielt.



Vielleicht kann ich mit diesem How To ja einigen etwas helfen die die Touch Bar dann vielleicht auch verstärkt nutzen, wer weiß 🙂
Was also alleine mit den abgebildeten Buttons geht:
  • AirPlay: schnell zwischen zwei Geräten hin und her wechseln.
  • AirPods🔋: Zeigt eine Notification mit dem Batteriezustand jedes Kopfhörers.
  • Like Song: setzt ein Herz an das aktuell gespielte Lied in Music. Damit Apple Music künftig bessere Vorschläge macht.
  • MTN: öffnet einen Tab mit MacTechNews.de
  • Sidecar: verbindet sich direkt mit einem iPad (warum Apple Sidecar nicht in der selben Gruppe wie den AirPlay Bildschirmen erscheinen lässt ist mir ein Rätsel)
  • Share Song: teilt den aktuellen Song via Song.link (nicht jeder meiner Kontakte hat Music)
  • VPN: besteht keine VPN Verbindung wird eine Verbindung via Tunnelblick aufgebaut - wird der Button betätigt, während ein Tunnel offen ist wird dieser geschlossen
Die Scripts für die Beispiele poste ich unten an!

Also, wie erstelle ich diese Funktionen?
1. Mit dem Program Automator muss via ⌘N ein neues Dokument angelegt werden, welches vom Typ Quick Action sein muss.

2. Die Funktionen können grade beim ersten Kontakt überwältigend sein 🙂 Um ein simples Apple Script ausführen zu lassen (darauf basieren alle der oben gegebenen Beispiele) gibt man einfach im Suchfeld "Run Apple Script" ein. Ein Doppelklick auf das Resultat fügt ein neues Script zum Ablauf rechts hinzu.

3. Dann einfach das Platzhalter Script von Apple mit dem gewünschten eigenen Script ersetzen.

4. Der Aktion ein eigenes Icon verpassen (ganz wichtig 😉). Dazu stehen die Standard Icons zur Auswahl, oder eigene icons (.png gehen perfekt). Tipp: wählt man ein Program im Programmeordner aus wird automatisch dessen Icon verwendet. Danke Apple! 👍🏽

5. ⌘S, dem Knopf einen Namen geben. Und fertig, das Fenster kann geschlossen werden.

Und jetzt? Wie bekomme ich die Dinger in die Touch Bar?

6. In den Systemeinstellungen → Erweiterungen findet man ganz unten den Punkt "Touch Bar".

Da wählt man die gewünschten Aktionen aus, zieht sie in die richtige Reihenfolge.
7. Mit dem Knopf "Touch Bar anpassen" unten rechts sollte man die Funktion "Quick Actions" ins Dock rechts in der Touch Bar legen. Damit diese immer schnell erreichbar sind.


Das wars 🙂 So mehr oder weniger einfach bekommt man eigene Apple Scripte (oder andere Funktionen) in die Touch Bar. Im Finder werden die Dateien übrigens in Library → Services abgespeichert.

Ich hoffe, der ein oder andere versteht die Erweiterungen der Touch Bar jetzt besser und findet sie für sich etwas nützlicher 😉 Als Erinnerung, ich stelle für BetterTouchTool ein ziemlich komplettes und kostenloses Catalina kompatibles PHoeNiX Preset zur Verfügung 🙂 Die angesprochenen Funktionen sind fast alle enthalten 😉

Anbei noch meine oben genannten Scripte. Achtung, in einigen müssen Minimale Änderungen gemacht werden (der Name der AirPods zB) 😉




AirPlay Switch: ersetzt YOUR_AIRPLAY_OUTPUT_HERE durch den entsprechenden Receiver.
tell application "Music"
    set AirPlayName to name of the first AirPlay device whose selected is true
    if AirPlayName is "YOUR_AIRPLAY_OUTPUT_HERE" then
        set current AirPlay devices to AirPlay device "Computer"
        return "Music playing on Computer"
    else
        set current AirPlay devices to AirPlay device "YOUR_AIRPLAY_OUTPUT_HERE"
        return "Music playing via AirPlay"
    end if
end tell

AirPods🔋: ersetzt NAME_DEINER_AIRPODS (4. Zeile) durch den Namen der AirPods. ACHTUNG Das im Standardnamen Verwendete Apostroph (Beispiel: Caliguvara's AirPods) ist keines. Der Name der AirPods muss dann einmal in Systemeinstellungen → Bluetooth kopiert und dann im Script eingesetzt werden.
return checkStatus()

on checkStatus()
    set LclAirPodsName to "NAME_DEINER_AIRPODS"
    --ACHTUNG Das im Standardnamen Verwendete Apostroph (Beispiel: Caliguvara's AirPods) ist keines. Der Name der AirPods muss dann einmal in Systemeinstellungen → Bluetooth kopiert und dann im Script eingesetzt werden.
    
    set myString to do shell script "system_profiler SPBluetoothDataType"
    
    --initial check if AirPods are not even there
    if myString does not contain LclAirPodsName then
        display notification "Your AirPods are not connected." with title "AirPods Battery Check"
    else
        
        --find out if connected/disconnected
        set AppleScript's text item delimiters to "name:"
        set myList to the text items of myString --each item of mylist is now one of the devices
        
        set numberOfDevices to count of myList
        set counter to 1
        repeat numberOfDevices times --loop through each devices checking for Connected string
            if item counter of myList contains LclAirPodsName then
                if item counter of myList contains "Connected: Yes" then
                    return checkBattery()
                else if item counter of myList contains "Connected: No" then
                    display notification "Your AirPods are not connected." with title "AirPods Battery Check"
                else
                    display notification "Error Parsing" with title "AirPods Battery Check" --this shouldn't happen
                end if
            end if
            set counter to counter + 1
        end repeat
    end if
end checkStatus

on checkBattery()
    set OUTPUT1 to do shell script "
OUTPUT1='';
BLUETOOTH_DEFAULTS=$(defaults read /Library/Preferences/com.apple.Bluetooth);
SYSTEM_PROFILER=$(system_profiler SPBluetoothDataType); 
MAC_ADDR=$(grep -b2 \"Minor Type: Headphones\"<<<\"${SYSTEM_PROFILER}\"|awk '/Address/{print $3}'); 
CONNECTED=$(grep -ia6 \"${MAC_ADDR}\"<<<\"${SYSTEM_PROFILER}\"|awk '/Connected: Yes/{print 1}'); 
BLUETOOTH_DATA=$(grep -ia6 '\"'\"${MAC_ADDR}\"'\"'<<<\"${BLUETOOTH_DEFAULTS}\"); 
BATTERY_LEVELS=(\"BatteryPercentCombined\" \"HeadsetBattery\" \"BatteryPercentSingle\" \"BatteryPercentRight\"); 

if [[ \"${CONNECTED}\" ]];
 then 
 for I in \"${BATTERY_LEVELS[@]}\";
  do 
  declare -x \"${I}\"=\"$(awk -v pat=\"${I}\" '$0~pat{gsub (\";\",\"\"); print $3}'<<<\"${BLUETOOTH_DATA}\")\";
   [[ ! -z \"${!I}\" ]] && 
   OUTPUT1=\"${OUTPUT}$(awk '/BatteryPercent/{print substr($0)}'<<<\"${I}\")${!I}%\";
    done;
    printf \"%s\" \"${OUTPUT1}\";
fi"
    
    set OUTPUT2 to do shell script "
OUTPUT2='';
BLUETOOTH_DEFAULTS=$(defaults read /Library/Preferences/com.apple.Bluetooth);
SYSTEM_PROFILER=$(system_profiler SPBluetoothDataType); 
MAC_ADDR=$(grep -b2 \"Minor Type: Headphones\"<<<\"${SYSTEM_PROFILER}\"|awk '/Address/{print $3}'); 
CONNECTED=$(grep -ia6 \"${MAC_ADDR}\"<<<\"${SYSTEM_PROFILER}\"|awk '/Connected: Yes/{print 1}'); 
BLUETOOTH_DATA=$(grep -ia6 '\"'\"${MAC_ADDR}\"'\"'<<<\"${BLUETOOTH_DEFAULTS}\"); 
BATTERY_LEVELS=(\"BatteryPercentCombined\" \"HeadsetBattery\" \"BatteryPercentSingle\" \"BatteryPercentLeft\"); 

if [[ \"${CONNECTED}\" ]];
 then 
 for I in \"${BATTERY_LEVELS[@]}\";
  do 
  declare -x \"${I}\"=\"$(awk -v pat=\"${I}\" '$0~pat{gsub (\";\",\"\"); print $3}'<<<\"${BLUETOOTH_DATA}\")\";
   [[ ! -z \"${!I}\" ]] && 
   OUTPUT2=\"${OUTPUT}$(awk '/BatteryPercent/{print substr($0)}'<<<\"${I}\")${!I}%\";
    done;
    printf \"%s\" \"${OUTPUT2}\";
fi"
    if OUTPUT1 is " " then
        display notification "Your AirPods are not connected." with title "AirPods Battery Check"
    else
        set BatteryLevel to "L: " & word 2 of OUTPUT2 & "%" & "
" & "R:" & word 2 of OUTPUT1 & "%"
    end if
    if BatteryLevel is "L: " & "
" & "R: " then
        display notification "Your AirPods are not connected." with title "AirPods Battery Check"
    else
        display notification BatteryLevel
    end if
    
end checkBattery

--thanks to @yyuuiko for the base of the code!
--thanks to @GoldenChaos for the great problemsolving idea for Catalina!

Like Sing
tell application "Music"
    try
        if loved of current track is false and disliked of current track is false then
            set loved of current track to true
        end if
    end try
end tell

MTN
tell application "Safari"
    activate
    tell window 1
        set current tab to (make new tab with properties ({URL:"https://mactechnews.de"}))
    end tell
end tell

Sidecar: ersetzt NAME_OF_YOUR_iPad (erste Zeile) durch den Namen des iPads.
set iPadName to "NAME_OF_YOUR_iPad"
tell application "System Events"
    tell process "SystemUIServer"
        try
            click (menu bar item 1 of menu bar 1 whose description contains "Displays")
            click (menu item 1 of menu 1 of result whose title contains iPadName)
        on error
            display dialog "Cannot find any iPads available right now"
        end try
    end tell
end tell

Share Song: das Script braucht die App JSON Helper aus dem Mac App Store als Hilfe. Wiegt nichts, kann vergessen werden, wird aber leider gebraucht ☹️
tell application "Music"
    set theCurrentTrackProperties to get properties of current track
    set theURL to "https://itunes.apple.com/search?term=" & name of theCurrentTrackProperties & " " & artist of theCurrentTrackProperties & "&limit=1"
end tell

tell application "JSON Helper"
    set content to fetch JSON from theURL
    set results to item 1 of results of content
    set trackUrl to |trackViewUrl| of results
end tell


tell application "Safari"
    activate
    tell window 1
        set current tab to (make new tab with properties ({URL:"https://song.link/" & trackUrl}))
    end tell
end tell

--thanks to @cfstcyr for the base of the code!

VPN: Als VPN App läuft hier Tunnelblick.
tell application "Tunnelblick"
    set VPNstate to get state of configurations
    if VPNstate contains "exiting" then
        connect all
    end if
    if VPNstate contains "connected" then
        disconnect all
    end if
end tell
„Don't Panic.“
+7

Kommentare

Peter Eckel10.12.1915:37
Klasse, danke für die Anregungen!
„Ceterum censeo librum facierum esse delendum.“
+1
eMac Extreme10.12.1915:52
Caliguvara
Bin dieses Jahr erst auf ein MBP mit TouchBar umgestiegen, daher kommen mir deine Beiträge hier im Forum sehr gelegen, um mich damit mehr zu beschäftigen. Du könntest dir überlegen, ob du deine Beiträge zur TouchBar und BetterTouchTool nicht in ein eigenes Journal auf MTN überführst.

Besten Dank für den Beitrag!
+1
Caliguvara
Caliguvara11.12.1909:57
@Peter
Gerne 🙂

@eMac Extreme
So sehr mich die Idee auch reizt, ist das hier wohl doch der falsche Platz 😉 Meine Spielereien basieren nahezu ausschließlich auf BetterTouchTool, und auf dem Forum da () bin ich dann auch ziemlich aktiv (selbes Pseudo, selber Avatar 😉). Die großen Neuerungen stelle ich aber auch hier gerne immer wieder ein, wie neulich das Update meines oben verlinkten Presets 😉
„Don't Panic.“
+1

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.