Schlagwort-Archiv für: AppleScript

Vorlagen in OmniFocus

13 Apr 2013
13. April 2013

OmniFocus, ein ausgewachsenes GTD-System, gehört zu meinen wichtigsten Programmen. Ohne diese App, welche für Mac, iPhone und iPad angeboten wird, würde ich an vieles nicht denken und hätte ein deutlich unorganisierteres Leben.

Aber, wie das nun mal so ist, nichts ist perfekt und man kann immer noch etwas verbessern. OmniFocus – in diesem Artikel geht es ausschließlich um die Mac-Version – fehlt eine Vorlagen-Funktion. Häufig muss ich Projekte (= eine Gruppe von Aufgaben) eintragen, die es so bereits mal gab bzw. bei denen kleine Teile des Textes – z.B. ein Name – anders sind. Daher wäre es sehr schön und vor allem zeitsparend, wenn man sich einfach aus einer Bibliothek vorgefertigter Projekte bedienen könnte. Und hier die gute Nachricht: mit ein wenig AppleScript-Magie ist das kein Problem! AppleScript ist eine in OS X integrierte Programmiersprache, die auf natürlicher Sprache basiert und dazu dient, Abläufe zu automatisieren und Programme miteinander zu verbinden. Viele Programme bieten Schnittstellen zu AppleScript an – darunter auch OmniFocus.

Besagtes Script (“Templates.scpt”) kann über diese Seite geladen werden. Es gehört in den folgenden Ordner unseres Home-Verzeichnisses:

Library/Scripts/Applications/OmniFocus

Sollte der Ordner “OmniFocus” in “Applications” noch nicht existieren, ist dieser neu anzulegen.

Der Library-Ordner selbst ist seit Lion standardmäßig versteckt. Er kann über das „Gehe zu“-Menü des Finders bei gedrückter Alt-Taste erreicht werden oder mit folgendem Terminal-Befehl (Terminal ist ein mitgeliefertes Dienstprogramm) dauerhaft sichtbar gemacht werden:

chflags nohidden ~/Library/

Das Tilde-Zeichen wird mit der Tastenkombination Alt-N eingegeben.

“Templates.scpt” liegt eine Readme-Datei bei, in der die weitere Vorgehensweise ausführlich beschrieben ist. Als erstes verschaffen wir uns in OmniFocus ein Icon, mit dem wir das Script aufrufen. Dazu ist ein Rechtsklick auf die Icon-Leiste erforderlich wir wählen den Menüpunkt “Symbolleiste anpassen” und ziehen das Symbol “Skript: Templates” in die Icon-Leiste:

OF Vorlagen 1

Nun benötigen wir in unseren Projekten einen Ordner “Template” oder “Templates”. Dort legen wir alle Projekte, für die wir eine Vorlage benötigen, ab. Diese können den Status “zurückgestellt” bekommen, damit sie in anderen Ansichten nicht weiter stören, das Skript aktiviert Projekte, die aus Vorlagen kommen, automatisch.

Wir schauen uns am besten ein Beispiel an. Das Erstellen eines neuen Blog-Eintrags hier ist bei mir ein Projekt aus 3 Aufgaben: Recherche, das eigentliche Schreiben und die Verlinkung in den sozialen Netzen. In meinem Template-Ordner gibt es daher folgenden Eintrag:

OF Vorlagen 2

Es ist also alles schon so vorbereitet, wie ich es für ein neues Blog-Projekt brauche. Schaut man sich den Screenshot etwas genauer an, fallen die Zeichenketten “$Thema” und “>>> Website” auf. Was hat es damit auf sich? $Thema ist ein Platzhalter, wir Software-Entwickler sagen dazu Variable. Platzhalter fangen standardmäßig mit einem Dollarzeichen an, beim ersten Start des Scripts kann aber auch ein alternatives Zeichen eingegeben werden. Für jeden Platzhalter wird bei Benutzung der Vorlage der gewünschte Wert in einem Dialog abgefragt. Wichtig ist, dass die Notiz zum Projekt (hier die beiden grauen Zeilen unter dem Projekttitel) eine Auflistung (durch Leerzeichen getrennt) der gewünschten Variablen in einer Extrazeile enthält, in meinem Fall nur $Thema. ”>>> Website” in der zweiten Zeile bedeutet, dass das neue Projekt im Ordner “Website” entstehen soll. Mache ich keine entsprechende Angabe, wird der Ordner beim Anlegen des Projekts interaktiv abgefragt. Da in meinem Fall aber Blog-Einträge immer in den Ordner “Website” kommen, ist diese Vorgabe sinnvoll.

Wenn ich nun in OmniFocus auf das Icon “Templates” klicke passiert folgendes:

OF Vorlagen 3

Das Script fragt mich zunächst, welche Vorlage ich benutzen möchte. Ich wähle “privaten Blogeintrag zum Thema $Thema” schreiben. Nun muss ich noch angeben, durch welchen Wert der Platzhalter “$Thema” ersetzt werden soll:

OF Vorlagen 4

Und damit ist mein neues OmniFocus-Projekt im Ordner “Website” auch schon fertig:

OF Vorlagen 5

Soweit zur grundsätzlichen Vorgehensweise. Das Script kann noch einiges mehr, für alle Details empfehle ich das Studium der mitgelieferten Readme-Datei. Nur ein Beispiel, trägt man in den Notizen zum Projekt in eine neue Zeile “start: 2d” ein, so bekommt das aus dieser Vorlage erstellte Projekt gleich ein Startdatum, welches 2 Tage von heute entfernt liegt. Es gelten die üblichen Zeitschreibweisen von OmniFocus wie z.B. “1w” oder auch “2w 3d”. Analog ist auch eine Angabe von z.B. “due: 6d” für ein Fälligkeitsdatum in sechs Tagen möglich.

Dateien automatisch via Dropbox teilen

12 Mai 2012
12. Mai 2012

OS X besitzt dank Automator und AppleScript hervorragende Automatisierungsmöglichkeiten, die wir uns hier schon an der ein oder anderen Stelle zunutze gemacht haben. Kürzlich bin ich bei MacinTweak auf einen Workflow gestossen, der dies sehr sehr eindrucksvoll unterstreicht. Es wird eine Datei ausgewählt und folgender Arbeitsablauf automatisiert:

  • die Datei wird gepackt und bekommt einen zufälligen Namen
  • dann wird sie in den Public-Ordner unserer Dropbox kopiert
  • anschließend wird eine E-Mail mit dem Weblink zu dieser Datei vorbereitet
  • eine Hazel-Regel entfernt die Datei nach einer gewissen Zeit wieder aus unserer Dropbox

Die Umbenennung erfolgt deshalb, weil jeder, der den Dateinamen kennt oder errät, die Datei aus dem öffentlichen Ordner unserer Dropbox laden kann. Bei sensibleren Dateien ist ein längerer Zufallsname daher so etwas wie ein Kennwort. Die hier beschriebene Vorgehensweise ist äußerst praktisch, wenn man eine Datei nicht per E-Mail senden möchte, weil sie beispielsweise zu gross ist (viele Anbieter haben Limits von 10 oder 20 MB).

Wer noch kein Dropbox-Konto (ein wirklich empfehlenswerter Cloud-Speicherdienst, auf den viele iOS-Apps zugreifen können) hat, kann gerne diesen Empfehlungslink verwenden und bekommt dafür 500 MB zusätzlichen Speicherplatz.

Auf geht’s! Wir starten den Automator (liegt im Programme-Ordner) und legen einen neuen Dienst an:

dropshare1

Unser neuer Dienst empfängt Dateien und Ordner im Finder:

dropshare2

Er besteht aus zwei Arbeitsschritten, die im linken Teil des Automator-Fensters ausgewählt werden können. Schritt 1 ist „Archiv erstellen“ mit den folgenden Einstellungen:

  • Sichern unter: Derselbe Name wie die Eingabe
  • Ort: Derselbe Name wie die Eingabe

dropshare3

Schritt 2 lautet „AppleScript ausführen“. Das benötigte AppleScript finden wir bei MacinTweak. Es muss in die grosse Textbox kopiert werden:

dropshare4

Mit dem Hammer-Icon können – und sollten wir nach jeder Änderung – überprüfen, ob das Skript von der Syntax her korrekt ist.

Am Skript selber habe ich ein paar Änderungen vorgenommen.

In Zeile 6 habe ich eine Reihe von Sonderzeichen aus der Zeichenkette entfernt, damit die Dateinamen nicht zu exotisch werden:

set end of str to some item of “ABCDEFGHIJKLMNOPQRSTUVWXYZadbcdefghijklmnopqrstuvwxyz1234567890_-”

In Zeile 13 habe ich dem Dateinamen die Zeichenkette shared- vorangestellt, damit ich leichter sehen kann, welche Dateien im Public-Ordner aus diesem Workflow stammen und ich diese leichter mit Hazel (s.u.) erfassen kann:

set theNewName to (“shared-” & randString & “.zip”)

Wenige Zeilen darunter müssen wir den Pfad unseres Public-Ordners angeben (Doppelpunkt als Pfadtrenner, bitte den tatsächlichen Gegebenheiten auf dem jeweiligen Mac anpassen):

set dest_folder to folder “Desktop:Dropbox:Public” of home

Und wieder ein paar Zeilen tiefer die Webadresse unsers Public-Ordners. Individuell zu ändern ist hier die numerische Dropbox-ID:

set the theURL to (“http://dl.dropbox.com/u/123456789/” & my text2url(theNewName))

Die ID kann z.B. ermittelt werden, indem wir eine Datei in den Public-Ordner unserer Dropbox legen und im Kontextmenü auf „Dropbox > Öffentl. Link kopieren“ klicken. Dies befördert eine Webadresse in die Zwischenablage, welche die ID beinhaltet.

Anschliessend speichern wir den Dienst – z.B. unter dem Namen „in Dropbox teilen“.

Wenn alles korrekt gelaufen ist, haben wir jetzt im Kontextmenü einer Datei (im Finder) einen neuen Dienst:

dropshare5

Dieser sollte nun alle Aktionen wie beschrieben ausführen. Im Public-Ordner der Dropbox finden wir die gepackte Datei:

dropshare6

Gleichzeitig öffnet sich das Mail-Programm mit dem öffentlichen Link zu dieser Datei:

dropshare7

Schnell noch den Empfänger, einen Betreff sowie eine kurze Nachricht reinschreiben und schon ist die Datei geteilt.

Eine Hazel-Regel sorgt bei mir dafür, dass diese Dateien nach 14 Tagen wieder entfernt werden. Der Zeitraum kann natürlich beliebig gewählt werden:

dropshare8

Über Hazel – ein praktisches Helferlein für Ordner-bezogene Aktionen – müsste ich eigentlich auch mal einen Artikel schreiben, da mir das Tool eine ganze Reihe von Arbeiten abnimmt. Mal sehen, wann ich dazu komme. Nun wünsche ich erstmal viel Vergnügen beim Teilen von Dateien via Dropbox!

iTunes Tipps & Tricks

11 Dez 2011
11. Dezember 2011

Heute möchte ich drei Tipps und Tricks rund um iTunes vorstellen. Die iTunes-App ist unser zentrales Programm, um Musik, Podcasts, Uni-Vorlesungen, Filme und TV-Sendungen abzuspielen und zu verwalten. Außerdem managet iTunes unsere iOS-Geräte sowie iPods und ist Apples Online-Store für alles außer Mac-Apps. Höchste Zeit also, dass wir uns hier mal ein wenig näher damit beschäftigen.

Die ersten beiden Tipps haben mit dem iTunes-Icon im Dock zu tun. Dieser Terminal-Befehl, welcher erst ab Lion funktioniert, sorgt dafür, dass beim Titelwechsel während des Abspielens der neue Titel kurz oberhalb des Dock-Icons angezeigt wird:

defaults write com.apple.dock itunes-notifications -bool TRUE; killall Dock

Die App „Terminal“ gehört zu den mitgelieferten Dienstprogrammen von OS X. In Aktion schaut das Ganze dann so aus:

itunes-dock1

Warum dieses eine derart versteckte Option ist, bleibt erstmal Apples Geheimnis. Deaktiviert wird die Anzeige wieder mit:

defaults delete com.apple.dock itunes-notifications; killall Dock

Für Tipp Nr. 2 müssen wir ein sogenanntes iTunes-Plugin herunterladen – und zwar DockArt. Ausgepackt kommt die entsprechende Datei (DockArt.bundle) in das Verzeichnis

Library/iTunes/iTunes Plug-ins

unseres Benutzerverzeichnisses. Der Library-Ordner selbst ist seit Lion standardmäßig versteckt. Er kann über das „Gehe zu“-Menü des Finders bei gedrückter Alt-Taste erreicht werden oder mit folgendem Terminal-Befehl dauerhaft sichtbar gemacht werden:

chflags nohidden ~/Library/

Das Tilde-Zeichen wird mit der Tastenkombination Alt-N eingegeben. Nach Neustart von iTunes klicken wir auf den neuen Menüpunkt Darstellung > Visuelle Effekte > DockArt, damit dort der entsprechende Haken gesetzt ist:

itunes-dockart1

Anschließend können wir das Plugin über Darstellung > Visuelle Effekte > Optionen… konfigurieren:

itunes-dockart2

Wichtig ist, dass der Haken bei „DockArt Aktivieren“ gesetzt ist. Durch „Cover im Dock“ wird während des Abspielens eines Titels das iTunes-Icon im Dock durch das Cover des Stücks ersetzt. Die Option „iTunes Icon“ blendet zusätzlich das iTunes-Icon verkleinert unten rechts ein. Für mehr Eleganz sorgt die Option „Schräges Cover“. Durch einen Haken bei „Modernes Aussehen“ erhalten wir das Cover in runder Form mit Rahmen. „Podcast Indikator“ zeigt die Anzahl der ungespielten Podcasts als Badge oben rechts an, allerdings nur solange iTunes läuft. Der „Fortschritt Indikator“ zeigt im unteren Teil des Ions an, wie weit der aktuelle Titel schon abgespielt ist. Mit der Konfiguration aus dem Screenshot oben sieht unser Dock-Icon nun letztendlich so aus:

itunes-dockart3

Für Tipp 3 wird’s abschließend richtig „geeky“, denn nun erweitern wir die Funktionalität von iTunes mittels AppleScript. AppleScript ermöglicht die Kommunikation und Interaktion mit zahlreichen Apps und ist für mich einer der Gründe, warum OS X so ein elegantes und mächtiges Betriebssystem ist. AppleScripts, die in iTunes als Menüpunkte auftauchen sollen, müssen wir in das Verzeichnis

Library/iTunes/Scripts/

unseres Benutzerordners legen. Der Dateiname (ohne Endung) wird zum Menüpunkt in iTunes (iTunes ggf. dazu neu starten):

itunes-applescript1

Sobald mindestens ein Skript in diesem Verzeichnis vorhanden ist, zeigt iTunes ein zusätzliches Skript-Menü an:

itunes-applescript2

Eine hervorragende Quelle für Skripte rund um iTunes sind Doug’s AppleScripts for iTunes. Inzwischen gibt es dort weit über 400 Skripte in verschiedenen Kategorien. Mit Hilfe des AppleScript-Editors (ebenfalls ein mitgeliefertes Dienstprogramm) können wir die Skripte editieren, etwa um sie einzudeutschen. Ich habe das beispielsweise mal für das Doug-Skript „New Play Count“ (Neuer Play Count) gemacht:

itunes-applescript3

Mit der Schaltfläche „Übersetzen“ im Editor können wir leicht feststellen, ob die AppleScript-Syntax noch korrekt ist. Eine weitergehende Einführung in AppleScript würde weit über den Rahmen eines solchen Blog-Artikels hier hinausgehen. Mit dem vorgestellten Skript können wir übrigens die Information ändern, wie oft ein Titel bereits abgespielt wurde:

itunes-applescript4

Ein weiteres nützliches Doug-Skript ist z.B. „Search YouTube“, welches uns in Safari auf YouTube Musik-Videos zum abgespielten Titel sucht.

blog comments powered by Disqus

TextExpander: Power-Snippets

17 Sep 2011
17. September 2011

TextExpander, ein Tool, welches ich bereits hier vorgestellt habe, wandelt zuvor definierte Kürzel in eine Langform um. Auf diese Weise kann der Tippaufwand für Briefe, E-Mails, Chats, HTML-Seiten uvm. deutlich reduziert werden. Die Software ist sowohl für OS X als auch für iOS verfügbar.

Die Snippets müssen aber nicht zwangsläufig feste ausgeschriebene Wörter sein. In diesem Artikel haben wir bereits gesehen, dass es sich auch um Shell-Skripte handeln kann, die Ausgaben nach einer festgelegten Programmlogik vornehmen. Jetzt ist es Zeit, den nächsten Schritt zu gehen, denn neben Shell-Skripten kann TextExpander auch AppleScript-Snippets verarbeiten. AppleScript ermöglicht die Kommunikation und Interaktion mit zahlreichen Apps und ist für mich einer der Gründe, warum OS X so ein elegantes und mächtiges Betriebssystem ist. So ist es mit Hilfe von AppleScript zum Beispiel kein Problem, von iTunes die Information zu bekommen, welcher Titel gerade abgespielt werden.

Der Einsatz von AppleScript eröffnet unseren TextExpander-Snippets daher völlig neue Möglichkeiten, für die ich in diesem Artikel einige Beispiele anführen möchte. In jedem Fall müssen wir beim Hinzufügen des Snippets den Inhaltstyp auf „AppleScript“ setzen:

te-applescript1

Finder

Dieses Snippet, welches ich im Netz gefunden habe, hat mich überhaupt auf die Idee gebracht, die AppleScript-Fähigkeiten von TextExpander näher zu erforschen:

tell application “Finder” to get POSIX path of (target of front Finder window as text)

Gibt man z.B. in einem Text-Editor das Kürzel für dieses Snippet ein, erscheint an der aktuellen Cursor-Position statt des Kürzels der Dateisystem-Pfad, in dem sich das vorderste Finder-Fenster befindet. Das ist beispielsweise sehr nützlich, wenn man gerade etwas dokumentiert, was mit Dateien zu tun hat.

Safari

Daraufhin habe ich mir überlegt: „Wenn das im Finder geht, kann mir Safari bestimmt auch sagen, wie die Webadresse des aktuellen Safari-Fensters/-Tabs lautet.“ Das wäre enorm praktisch, da ich sehr häufig Links in meine Texte einfüge, die ich zuvor im Browser herausgesucht habe. Mit etwas Hilfe von Smile-Software, dem Hersteller von TextExpander, bin ich zu folgendem Snippet gekommen, welches diesen Job hervorragend erledigt:

tell application “Safari” to return URL of front document

Allein dieses Snippet ist für mich so nützlich, dass ich es mehrmals am Tag verwende. Mit ein wenig Mehraufwand kann man TextExpander sogar dazu bewegen die Webadresse gleich als HTML-Link (also mit dem a-Tag drumherum) auszugeben:

tell application “Safari”
set theURL to URL of current tab of window 1
end tell
set result to “<a href=′” & theURL & “′></a>”
return result

(in diesem Skript müssen die Hochkommata noch ersetzt werden; ich habe ein Ersatzzeichen verwendet, da mein Editor RapidWeaver normale Hochkommata abwechselnd unten und oben schreibt)

iTunes

Vielleicht möchten wir ja mal auf Twitter oder Facebook den aktuellen Titel, den wir gerade in iTunes hören, posten. Nun, mit diesem Snippet ist das kein Problem:

tell application “iTunes”
try
if not (exists current track) then return
set this_artist to (get artist of current track)
set this_track to (get name of current track)
set this_album to (get album of current track)
set result to this_track & ” (” & this_album & “) von ” & this_artist
return result
end try
end tell

Adressbuch

Dieses Snippet fügt den Namen der Person, die gerade im Adressbuch ausgewählt ist, in unseren Text ein:

tell application “Address Book”
set mylist to selection
repeat with this_person in mylist
set first_name to first name of this_person
set last_name to last name of this_person
end repeat
end tell
set full_name to first_name & ” ” & last_name
return full_name

BBEdit

BBEdit ist seit ein paar Wochen mein neuer Programmiereditor. Im Gegensatz zu der zuvor dafür verwendeten App hat BBEdit eine AppleScript-Schnittstelle. Öfters muss ich in ein PHP-Skript, welches ich gerade schreibe, den Namen dieses Skripts einfügen. Auch das erledigt jetzt ein Snippet:

tell application “BBEdit”
set DocName to get name of document 1
return DocName
end tell

Fazit

Durch den Einsatz von AppleScript in TextExpander eröffnen sich – wie ich hoffentlich zeigen konnte – völlig neue Möglichkeiten. Der Fantasie sind hierbei eigentlich kaum Grenzen gesetzt. Ich hoffe daher, in der nächsten Zeit noch viele weitere nützliche „Power-Snippets“ zu finden oder selber zu schreiben. Über Hinweise und Ideen würde ich mich in den Kommentaren zu diesem Artikel jedenfalls sehr freuen.

blog comments powered by Disqus

Version 7.1 - © 1995-2013 by Dr. Markus Jasinski - Impressum