Programmieren,  programming,  Studium

Kurzbefehl zum automatischen Setup der Arbeitsumgebung

Heute teile ich endlich mal wieder einen neuen Kurzbefehl unter Verwendung von AppleScript. Dieser bereitet mit einem Klick automatisch dein ganzes Setup für die Hochschule / die Arbeit vor – von den benötigten Tabs in Safari über das Öffnen von Apps und dem Abspielen deiner Lieblingsplaylist bis hin zum automatischen Erstellen von Erinnerungen. Ein zweiter Kurzbefehl am Abend soll dann alles wieder aufräumen, die Erinnerungen und den Papierkorb löschen.

Im Folgenden gehe ich alle Bausteine des Kurzbefehls durch, um dir das Anpassen auf deinen Anwendungsfall zu erleichtern.

Grundlegende Voraussetzungen gibt es eigentlich keine – die Apps Kurzbefehle und Skripteditor sind auf Macs bereits vorinstalliert. Durch die Blockstruktur gestalten sich Kurzbefehle recht intuitiv; die AppleScript-Snippets werde ich im Folgenden erklären.

Eine Einführung in die Funktionen und Anwendungsfällen findest du in meinem Beitrag “Automationen und Kurzbefehle für dein iPhone schreiben“. Einen ähnlichen Beitrag zum Thema zum erleichterten morgendlichen Checken von Apps am iPhone findest du in meinem Beitrag “Kurzbefehl zum Öffnen von bestimmten Apps erstellen“.

Warum einen Kurzbefehl, der AppleScript ausführt?

Ein Kurzbefehl an sich hat bereits viele Möglichkeiten, ist allerdings nicht so mächtig und teilweise umständlicher als AppleScript-Code es ist. Zum Beispiel kann ein Kurzbefehl-Block keinen Safari-Tab mit einer angegebenen URL öffnen, eine Erinnerung mit einer dynamisch berechneten Zeit erstellen, oder eine Spotify-Playlist abspielen. Der gesamte Workflow für das Setup deiner Arbeitsatmosphäre kann mit AppleScript geschrieben werden, nicht aber rein mit Kurzbefehl-Blöcken. Der Grund für die Verwendung der Kurzbefehl-App liegt in den Export-Möglichkeiten als App im Dock und als Widget im rechten Seitenmenü.

Im Skripteditor kannst du deinen AppleScript- bzw. JavaScript-Code unter Ablage > Exportieren als App im Programme-Verzeichnis speichern, indem du als Dateiformat App auswählst. Damit taucht im Launchpad eine neue App mit dem Apple-Script-Logo auf, welche du in dein Dock ziehen kannst. Allerdings hat jede mit dem Skripteditor exportierte App dasselbe Logo, was die Unterscheidung im Dock nur über die Bezeichnung beim Hovern möglich macht.

Wird der Code allerdings in einem Kurzbefehl allerdings in einem AppleScript ausführen-Block aufgerufen, verhält sich dieser wie gehabt, lässt sich problemlos mit anderen Kurzbefehl-Blöcken kombinieren und wie einen Kurzbefehl exportieren. Das heißt, dass in der Kopfleiste das Logo des Kurzbefehls angepasst werden kann. Außerdem kann der Kurzbefehl über Ablage > Exportieren zum Dock hinzugefügt werden. In der rechten Seitenleiste (vom rechten Rand des Trackpads mit zwei Fingern von rechts nach links streichen) kann unter Widgets bearbeiten ein Widget der App Kurzbefehle ausgewählt werden und dort der erstellte Kurzbefehl ausgewählt werden. So kannst du den Kurzbefehl über die Gestensteuerung und einen Klick aufrufen.

Apps öffnen, ausblenden und schließen

Öffnen von Apps

Für das Öffnen von Apps gibt es zweierlei Möglichkeiten. Zum einen kannst du den Kurzbefehl-Block App öffnen verwenden und im Drop-Down-Menü die entsprechende App selektieren. Eine andere Möglichkeit besteht in der Verwendung eines AppleScript ausführen-Blocks mit folgendem Inhalt.

tell application "Safari"	
    activate
end tell

Ausblenden von Apps

Auch beim Ausblenden, also dem Minimieren, von Apps gibt es zum einen die Möglichkeit über den Kurzbefehl-Block App ausblenden, oder aber den folgenden AppleScript-Code:

tell application "Safari"
    set visible to false
end tell

Schließen von Apps

Beim Schließen von Apps gibt es ebenfalls entweder die Möglichkeit über den Kurzbefehl-Block App beenden, oder aber durch dien folgenden AppleScript-Code:

tell application "Safari"
    quit
end tell

Tabs in Safari öffnen

Das Öffnen von Tabs mit einer bestimmten URL ist, wie gesagt, nicht durch simple Kurzbefehl-Blöcke umsetzbar. Der folgende AppleScript-Code öffnet ein neues Fenster in Safari und öffnet anschließend je einen Tab mit der angegebenen URL.

tell application "Safari"
    make new document
    set URL of front document to "https://ramona.gloetter.de"
    tell window 0
	make new tab at end of tabs with properties {URL:"https://www.deepl.com/de/translator"}
	make new tab at end of tabs with properties {URL:"https://chatgpt.com"}
	make new tab at end of tabs with properties {URL:"https://www.google.de"}
	set current tab to tab 1
    end tell
    activate
end tell

Dabei erhält das Fenster den Identifikator 0; wenn also mehrere Fenster geöffnet werden sollen, muss jedem eine andere ID zugewiesen werden, über welche das Fenster angesprochen werden kann. set URL of front document setzt die URL des ersten Tabs, welcher ansonsten ein neuer leerer Safari-Tab wäre. Zuletzt wird der current tab, also der als aktiv angezeigte Tab, anhand des Indizes (beginnend bei 1) der URLs gesetzt.

Musik abspielen

Musik von Apple Music abspielen

Da die Musik-App nativ von Apple kommt, lässt sich diese problemlos mit Kurzbefehl-Blöcken manipulieren. Mit dem Block Musik abspielen lässt sich ein Album / eine Playlist wiedergeben und mit dem Block Wiedergeben/Anhalten pausieren.

Alternativ lässt sich dies auch mit AppleScript umsetzen:

tell application "Music"
    activate
    play playlist "Meine coole Playlist"
    pause
end tell

Musik von Spotify abspielen

Diese Aktion lässt sich nicht mit Kurzbefehl-Blöcken umsetzen. Spotify kann zwar als App geöffnet, allerdings nicht weiter manipuliert werden. Im folgenden AppleScript wird Spotify geöffnet, eine Playlist mittels der angegebenen Spotify URI gestartet und anschließend sofort pausiert – damit die Musik nicht mitten in der Vorlesung einfach losgeht ;).

tell application "Spotify"
    activate
    play track "spotify:track:1dwTG4PVhiWzeu0fUfMMMb"
    pause
end tell

Die Spotify URI kann in der App über die drei Punkte ... > Teilen > ⌥ [option] + Spotify URI kopieren kopiert werden.

Erinnerung erstellen

Ich habe mir für diesen Zweck in der Erinnerungen-App eine neue Liste Kurzzeit erstellt, in welcher die vom Kurzbefehl erstellten Erinnerungen landen sollen, damit ich diese später ohne weitere Probleme automatisch löschen kann.

Wie bereits erwähnt, können mit der Kurzbefehle-App Erinnerungen in einer bestimmten Liste mit dem Neue Erinnerung hinzufügen-Block erstellt werden. Dabei muss manuell eine Uhrzeit eingetragen werden. Das funktioniert also schonmal prinzipiell und mag für den einen oder anderen bereits eine voll funktionsfähige Lösung sein. Möchte man allerdings eine Erinnerung auf in 90 Minuten erstellen, hat man ein Problem. Auch hier kann AppleScript Abhilfe leisten.

Mit AppleScript kann man sowohl Erinnerungen auf eine bestimmte Uhrzeit erstellen, oder aber die Uhrzeit relativ zum Startzeitpunkt des Kurzbefehls setzen.

Erinnerung auf eine bestimmte Uhrzeit:

Auch hier gibt es mehrere Möglichkeiten. Entweder kann die Uhrzeit für jede Erinnerung getrennt als String gesetzt werden:

tell application "Reminders"
    tell list "Kurzzeit"
        make new reminder in targetList with properties {name:"Kaffeepause", remind me date:(date "10:00")}
        make new reminder in targetList with properties {name:"Mittagspause", remind me date:(date "12:00")}
    end tell
end tell

Oder aber die Uhrzeit in einer Variable gespeichert werden, um mehrere Erinnerungen auf dieselbe Uhrzeit zu setzen:

set targetTime to (current date)
set hours of targetTime to 14
set minutes of targetTime to 0

tell application "Reminders"
    tell list "Kurzzeit"
        make new reminder in targetList with properties {name:"Kaffeepause", remind me date:targetTime}
        make new reminder in targetList with properties {name:"Kaffeepause", remind me date:targetTime}
    end tell
end tell

Erinnerungen auf eine dynamische Zeit relativ zum Startzeitpunkt des Kurzbefehls:

Hier wird die aktuelle Zeit plus eine gegebene Anzahl an Minuten gerechnet, um die Zeit der Erinnerung zu bestimmen. Auch hier kann die Zeit entweder individuell pro Erinnerung gesetzt werden:

set currentDate to (current date)

tell application "Reminders"
    tell list "Kurzzeit"
        make new reminder with properties {name:"Kaffeepause", remind me date:currentDate + (90 * minutes)}
        make new reminder with properties {name:"Mittagspause", remind me date:currentDate + (180 * minutes)}
    end tell
end tell

Oder aber in einer Variable für die Verwendung in mehreren Erinnerungen gespeichert werden:

set currentDate to (current date)
set remindDate to currentDate + (90 * minutes)

tell application "Reminders"
    tell list "Kurzzeit"
        make new reminder with properties {name:"Kaffeepause", remind me date:remindDate}
    end tell
end tell

Außerdem kann eine for-Schleife für regelmäßige Erinnerungen zwischen einer Start- und Endzeit erstellt werden:

set startTime to current date
set hours of startTime to 10
set minutes of startTime to 0

set endTime to current date
set hours of endTime to 18
set minutes of endTime to 0

tell application "Reminders"
    set reminderList to list "Kurzzeit"
	
    repeat while startTime is less than endTime
        set timeString to time string of startTime
        make new reminder in reminderList with properties {name:"Kaffeepause" & timeString, remind me date:startTime}
        set startTime to startTime + (90 * minutes)
    end repeat
end tell

Löschen von Erinnerungen

Alle zuvor durch den Kurzbefehl erstellten Erinnerungen sollen automatisch gelöscht werden, indem die ganze Liste geleert wird. Auch das funktioniert nur mit AppleScript, da über die ganze Liste iteriert werden kann, um die Listenelemente zu löschen.

set listName to "Kurzzeit"

tell application "Reminders"
    set reminderList to list listName
    set reminderItems to reminders of reminderList

    repeat with reminderItem in reminderItems
        delete reminderItem
    end repeat
end tell

Papierkorb leeren

Eine solche Aktionen ist ebenfalls nur mit AppleScript möglich, da mit solchen Manipulationen des Finders nicht leichtfertig umgegangen werden sollte.

tell application "Finder"
    empty the trash
end tell

Leave a Reply

Your email address will not be published. Required fields are marked *