Posts mit dem Label AppleScript werden angezeigt. Alle Posts anzeigen
Posts mit dem Label AppleScript werden angezeigt. Alle Posts anzeigen

Dienstag, 26. August 2014

iTunes-Tipp: Per Script Zum aktuellen Titel in Musik-Sammlung springen

Das schon vor einiger Zeit runderneuerte iTunes 11 machte anfänglich viele Nutzer unglücklich. Dies lag vor allem an der neuen zwangsverordneten Alben-Darstellung der Musik-Sammlung. Nach langem Bitten und Drängeln hatte Apple aber doch Einsicht; und so konnte im Zuge späterer Updates mehr und mehr das alte Look & Feel bei Bedarf wiederhergestellt werde. Ebenso wurden schmerzliche vermisste Funktionen nachgereicht. 
Itunes yosemite mavericksMit OSX 10.10 Yosemite steht bald wieder ein neues Update ins Hause; iTunes bewegt sich (doch): Rot ist das neue Blau, wie sich ein (bunter) Vergleich der Icons zeigt. :)

Dazu gehört(e) bei iTunes 11 zunächst auch die Sprung-Funktion "Zum aktuellen Titel" im iTunes-Menü "Steuerung".
Mancher war es, wie ich, seit Jahren gewohnt zum aktuellen Titel mit dem Kurzbefehl ⌘ + L zum aktuellen Titel in iTunes zu springen.
In Version 11 hatte man den Kurzbefehl für diese nützliche Funktion erstmal vergessen. Doppel-Minus (heute heißt es wohl: Dislike)

Der Kurzbefehl wurde zwar bald wieder zur Verfügung gestellt, macht aber nicht (mehr) immer das, was man eigentlich möchte: mit dem Kurzbefehl ⌘+L gelangt man nun zwar wieder zum aktuell gespielten Titel, jedoch nicht zwangsweise in der Musik-Sammlung bzw. dem zugehörigen Album sondern an die Stelle, von der aus der Titel gerade gespielt wird – dies kann auch eine Playlist, zuletzt gespielte Titel, o. Ä. sein. Das ist zwar kein Totalausfahl, weil so etwa auch die Titel-Informationen (⌘+i) bearbeiten kann.

Manche Dinge, wie z. B. löschen von Titeln, kann man aber nur, wenn man ihn in iTunes in der Bibliothek (Musik, Film, Podcasts, etc.) ausgewählt hat.

Hier hilft einem das Springen zum aktuellen Titel also nicht  weiter, wenn es sich um eine Playlist handelt (man könnte den Titel dann höchstens von Playlist entfernen).

Lange Zeit hatte ich in solchen Fällen dann die Suche in iTunes aufgerufen (⌘+F), den Namen des Liedes eingegeben, Sekundär-Klick auf den Track, um das Kontextmenü zu öffnen und schließlich "Gehe zu Titel" geklickt. *puh*
Ganz schön anstrengend! So kommt man aber wenigstens zum gesuchten Titel in der Musik-Sammlung. Wenn man jetzt aber noch mit Duplikaten zu kämpfen hat, wird die Sache nicht nur anstrengend, sondern schnell auch unübersichtlich & fehlerträchtig.

Zum Glück geht es auch einfacher mit Hilfe eines AppleScripts für iTunes.

1. Dazu muss folgender Code ins AppleScript-Editor.app eingefügt & übersetzt werden

tell application "iTunes"

activate

try

set dbid to (get database ID of current track)

set musicLib to some playlist whose special kind is Music

set theTrack to some track of musicLib whose database ID is dbid

revealtheTrack

end try

end tell

2 und als Script (.scpt) in eurem Home-Verzeichnis unter ~/LibraryiTunes/Scripts abgespeichert werden z. B. als Reveal current song.scpt o. Ä.

3. nach einem Neustart von iTunes findet sich zwischen Fenster und Hilfe im iTunes-Menü nun das Script-Symbol) über das man das Skript aufrufen kann.
Man kann ggf. noch einen eigenen Tastaturkurzbefehl über die Systemsteuerung vergeben.

Alternativ kann man das Skript mittels eines Launchers wie Alfred oder Quicksilver starten; was wohl am komfortabelsten ist…

Statt nun auch noch eine lange Beschreibung zu liefern, wie man dies in Alfred einrichtet, hier nur kurz ein Screenshot meiner Erweiterung
– und, für die ganz Faulen, ein Download-Link zum AppleScript von oben und der Extension (müsste mit Alfred v1 & v2 kompatibel sein).

Lob & Dank an mich.

Alfred Extension Reveal current itunes Song in musik library 1

Dienstag, 15. Juli 2014

Bootcamp: Per Script von OSX in Windows booten und zurück

Wer als Mac-Besitzer häufiger noch auf Windows angewiesen ist, hat eine Reihe von Möglichkeiten, um Windows zu betreiben. Die gängigste Methoden sind dabei Virtualisierung oder eine Boot-Camp-Installation.

Virtualisierung ist die einfachste Methode, um ein Windows-Gastbetriebssystem, etwa mittels Parallels (Klassenprimus), VMWare (meine Empfehlung) oder VirtualBox (kostenlos) zu betreiben.
Wer allerdings die Hardware exklusiv für ein Betriebssystem nutzen möchte (etwa für PC-Spiele) oder mit Software arbeitet, die sich nicht richtig virtualisieren lässt (Stichwort Hyper-V/SLAT), der kann auf eine parallele Installation von Windows ausweichen. Um ein solches Dual-Boot-Szenario zu erleichtern, stellt Apple den Bootcamp-Assistenen zur Verfügung. Der Assistent hilft bei den nötigen Handgriffen (insb. Umpartitionieren & Installation) und – ganz wichtig – stellt die benötigten Windows-Treiber für die eigene Apple-Hardware bereit. (Wer noch zwischen Virtualisierung und Dual-Boot schwankt, dem sei gesagt: Auch wenn man mit dem Bootcamp-Assistenten eine gewisse Hilfe bekommt, ist die parallele Installation von Windows doch aufwändiger.)

Wie der Titel schon sagt, möchte ich hier zeigen, wie man per Script einfach und schnell von OSX in Windows bootet und umgekehrt. 

1. Reboot von Mac OSX in Windows: per AppleScript

do shell script "bless -mount /Volumes/BOOTCAMP -legacy -setBoot -nextonly" with administrator privileges
do shell script "shutdown -r now" with administrator privileges 

Am Terminal:

sudo bless -mount /Volumes/BOOTCAMP -legacy -setBoot -nextonly
sudo shutdown -r now

Damit wird der Rechner ohne weitere Vorwarnung heruntergefahren und die Windows-Partition gestartet.

Man muss im Applescript bzw. beim Terminalbefehl ggf. den Namen der Windowspartition anpassen.
Der Name sollte sich am Bootcamp-Laufwerksamen auf dem Desktop bzw. im Finder ablesen lassen.
Mann kann den Laufwerksnamen auch direkt im Terminal nachgeschlagen:

ls /Volumes

Terminal  bash  80×24  (bei mir heißt die Windowspartition es eben BOOTCAMP)

Insbesondere das AppleScript lässt sich problemlos per Launcher starten oder direkt in Quicksilver, Alfred & Co einbinden. Siehe hier.
Ein kleiner Nachteil an dem Skript ist, dass man stets das Admin-Passwort eingeben muss.
Wem es nicht zu unsicher ist, der findet hier eine Anleitung, wie man sein Passwort im Script mit angibt. 

2. Wer statt eines Scripts lieber kleines Tool verwendet findet in BootChamp einen Freund:

BootChampInSystemMenu

Nützlich und zudem kostenlos – wer also noch Platz in seinem Menü hat, wird hier bedient. :-)

3. Schließlich gibt es hier noch ein Batch-Skript, um von Windows nach Windows zu rebooten:

@echo off
c:\progra~1\Bootca~1\bootcamp.exe -StartupDisk "Windows"
Shutdown /r /t 0 

4. Per Alt-Taste beim Booten

Nicht unerwähnt bleiben soll schließlich auch die Standardmethode zum Wählen des gewünschten Betriebssystems beim Hochfahren:
Gleich nach dem Einschalten des Rechners die ⌥-Taste halten, bis ein Boot-Menü erscheint.

Frohes Schaffen.

Freitag, 10. Mai 2013

Do-it-yourself: Take five Script für iTunes

Hier wieder ein kleiner Beitrag aus der Rubrik DIY (gesprochen: dē-i-ˈwi – als Lerneinheit des Tages).

Der ein oder andere ist vielleicht schon auf die nützliche App Take Five für iOS und mittlerweile auch OSX gestoßen, mit der sich die Musikwiedergabe auf Wunsch eine gewisse Zeit pausiert lässt und dann wieder von alleine anspringt. Eine Comic-Illustration auf der Webseite macht das Problem sehr schön deutlich: 

NewImage

Keine schlechte Idee, wird nun derjenige sagen, der es gewohnt ist, mit Musik zu arbeiten oder zu lernen (wobei die moderne Lernpsychologie nicht all zu viel davon hält beim Lernen / Arbeiten ständiger Musik zu hören; aber es kommt auch etwas auf die Musik und die individuellen Gewohnheiten an). 

Takefive

(C) Take Five Logo 

Das schöne an der App ist, dass es mit praktisch allen gängigen Musikapps, von iTunes über Radium bishin zu Spotify und Rdio, arbeitet. Wer das beschriebene Problem kennt und nicht nur mit iTunes hört, dem sei dieses wirklich schön designte App ans Herz gelegt; zumal es fast nichts kostet.

Wer aber sich aber von iTunes unterhalten lässt und vielleicht auch ein LauncherApp wie Alfred oder Quicksilver installiert hat, der kann sich das Geld sparen und eine DIY-Lösung basteln. Besonders für diejenigen, die keine tolle Oberfläche brauchen, sondern nur die Pause/Auto-Resume Funktion benötigen eine praktische (ergänzende) Sache, wie ich meine.

Ich mache es kurz und beschreibe, wie ich es gemacht habe: 

In Alfred in den Einstellungen unter Extensions eine Applescript-Erweiterung hinzugefügt und folgenden Quelltext eingefügt:

on alfred_script(q)
tell application "System Events" if (name of processes) contains "iTunes" then tell application "iTunes" if player state is playing then pause delay q*60 play end if end tell end if end tell
end alfred_script

Als Schlüsselword habe ich itake verwendet und damit das Skript nicht die Eingabe (von Alfred) blockiert, die Option Background, sowie die Parametereinstellung: Required.
Das Logo hier auf der Seite oder eines aus der Google-Bildersuche lässt sich zudem bei der Erstellung der Extension per Drag&Drop als Icon verwenden.

Alfred Extension iTake Preferences

Und fertig ist die Laube.

Im Launcher lässt sich der Befehl mit der gewünschten Pausenzeit nun ganz einfach aufrufen: Beispielsweise 6 Minuten.

Launch itake 6

 

 

 

 

 

 

Auch ohne speziellen Launcher lässt sich Ähnliches mit AppleScript und Spotlight erzielen.

Hierzu den (angepassten) Quelltext in den AppleScript-Editor einfügen, übersetzen und als "Programm" unter einem sinnigen Namen (wie Take Five) speichern. :)
Statt fünf Minuten bzw. 300 Sekunden lässt sich auch jede andere Zeit verwenden. Aber anders als beim AlfredScript, bei dem wir die Zeit direkt eingeben können, muss man sich hier beim Übersetzen / Speichern für ein festes Zeitintervall entscheiden. Man kann sich natürlich mehrere solche Apps anlegen, z. B. Take 5, Take 10, etc.

tell application "System Events"

if (name of processes) contains "iTunes" then

tell application "iTunes"

if player state is playing then

pause

delay 300

play

end if

end tell

end if

end tell

Have fun.

Montag, 25. März 2013

Safari Einstellungen per AppleScript setzten

Die Möglichkeiten in Mac OSX zur Automatisierung von Apps via AppleScript, Automator-Workflows, Shell-Skripten, usw. sind wahrlich enorm.

Hier ein kleines Beispiel zur AppleScript-gesteuerten Änderung von Safari-Einstellungen, speziell der De-/Aktivierung des Ladens von Bildern.
Die wenigsten werden wohl heute wohl noch aufgrund geringer Bandbreite die Bilder beim Surfen deaktivieren, allerdings kann dies trotzdem ab und an ganz hilfreich sein, wenn man sich etwa auf die Inhalte konzentrieren will, und soll letztlich ja nur als Beispiel dienen.

Hier mein AppleScript:

activateapplication "Safari"
tell application "System Events"
tell process "Safari"
click menu item "Einstellungen …" of menu 1 of menu bar item "Safari" of menu bar 1
click button "Erscheinungsbild" of tool bar 1 of window 1
tell checkbox 1 of group 1 of group 1 of window "Erscheinungsbild"
click
delay 1
--tell application "System Events"
--if (name of processes) contains "Safari" then tell application "Safari" to quit
--end tell
--or
tell application "System Events"
if (name of processes) contains "Safari" then tell application "Safari" to close window "Erscheinungsbild"
end tell
end tell
end tell
end tell 

Wie man sieht, müssen zur GUI-Automatisierung die deutschen Menütitel und Bezeichnungen verwenden werden ("Einstellungen ...", "Erscheinungsbild"), während der eigentliche AppleScript-Code in Pseudo-Englisch steht.  

Das (nach den persönlichen Bedürfnissen) angepasste AppleScript speichert man im AppleScript-Editor am besten als ausführbare App, so kann man sie bequem via Spotlight, o. Ä. aufrufen – oder fügt den Code als Extension zu einem Launch-Manager wie Alfred [1] oder Qucksilver [2] hinzu.

[1] http://www.alfredapp.com/

[2] http://qsapp.com/

Sonntag, 11. September 2011

Open Terminal here Kontextmenü-Eintrag erstellen

Seit Snow Leopard lassen (OS X 10.6) lassen sich im Finder (64 Bit) zwar keine Kontext-Menü Plug-ins mehr nutzen, aber mit Hilfe des Automators kann man im Menü Dienste eigene Kontext-Einträge hinzuzufügen.
AutormatorDienstMan startet den Automator und wählt Typ "Dienst".
Nun wird angegeben, welchen Input der Dienst empfangen soll: z.B. z.B. Ordner im Finder.
Empfange Ordner im Finder
Nun muss man dem Dienst Aktionen hinzufügen, etwa die Aktion “Ausgewählte Finder-Objekte abfragen” um die im Finder ausgewählten Dateien/Ordner an die darauf folgende Aktion zu übergeben.
Als sehr einfaches, und praktisches Beispiel zum Nachmachen, füge ich einen Dienst zum Öffnen eines Terminals in einem ausgewählten Ordner hinzu.
Als nochmal von vorne: Im Automator den Typ Dienst wählen, als Input Ordner im Finder empfangen einstellen...
... und nun noch eine Aus dem Aktionen-Fenster "Applescript" hinzufügen (kann man suchen) ...
... und folgenden Code eingeben und einmal übersetzten (mit dem Hammer-Symbol):
on run {input, parameters}
tell application "Terminal"
activate
do script ("cd " & quoted form of POSIX path of input)
end tell
return input
end run
Automatrcode75
... nun muss der Dienst nur noch unter einem gefälligen Namen (z.B. "Open Terminal here")
gespeichert werden: Und fertig ist der eigne Kontext-Menü-Eintrag.
Kontextmenu75
Wer will, kann nun noch unter Systemeinstellungen->Tastatur-> Tastaturkurzbefehle-> Dienste einen Hotkey für den Dienst vergeben.
ServiceHotkey75

Montag, 28. März 2011

Dock per Applescript sperren / entsperren

Aus Dusseligkeit habe ich mir schon des Öfteren den Downloads-Stack oder wahlweise auch den Dokumente-Stack mit der Maus aus dem Dock gezogen. Zwar ist kann man die Ordner schnell wieder ins Dock ziehen, aber zum einen muss man diese dann erstmal wieder so einstellen, wie man es gerne hätte bzw. gewohnt ist (habe ich hier schon mal zusammengeschrieben) – und zum anderen ist die Reihenfolge der Objekte nach einer solchen Wiederherstellungsaktion meist nicht mehr so wie vorher.

Gerade deswegen möchte ich unbedingt vermeiden, meine Stacks aus Versehen in eine Rauchwolke zu verwandeln. Aus diesem Grund schütze ich mein Dock vor Änderungen (siehe oben). Die Sperre lässt sich per Terminal setzten, oder unter Zuhilfenahme von verschieden Apps, wie Docker, TinkerTool und vielen mehr.

Bisher hatte ich mein Dock nur selten verändert, so dass ich die Sperre einfach gesetzt lassen konnte. Allerdings hat sich durch den neuen Mac App Store die Situation geändert. Frisch geladene Apps landen gleich im Dock. Das ist zwar schick, aber bei der Anzahl und Wesen vieler Programme aus dem MAS nicht gerade der rechte Ort. Zudem wäre das Dock so auch sehr schnell massiv überfrachtet. Nach dem ich also ein App aus dem MAS geladen habe, entsperre ich nun i. d. R. mein Dock per Terminal, entferne das App aus dem Dock, und sperre wieder. Da mir das Ganze nun etwas zu mühsam geworden ist, habe ich mich für folgendes selbstgebastelte Applescript-Progrämmchen entschieden, mit dem sich das Dock schnell entsperren und wieder gegen Veränderungen schützen lässt (hier gefunden).

 

display dialog "Lock the Dock..." buttons {"Lock", "Unlock", "Cancel"} default button 3

copy the result as list to {buttonpressed}

if the buttonpressed is "Lock" then

try

tell application "Dock" to quit

do shell script "defaults write com.apple.dock contents-immutable -bool true"

delay 1

tell application "Dock" to activate

end try

else if the buttonpressed is "Unlock" then

try

tell application "Dock" to quit

do shell script "defaults write com.apple.dock contents-immutable -bool false"

delay 1

tell application "Dock" to activate

end try

end if

 

Einfach in den Applescript-Editor einfügen, übersetzen und als Programm abspeichern, z.B. unter "UnLock the Dock". Lässt sich prima aus Spotlight oder einem Applauncher aufrufen.

Have fun.

Freitag, 20. August 2010

PDFs per Automator-Workflow zusammenfügen / kombinieren

Gerade musste ich ein 400 Seiten PDF zusammenfügen, dass in 10 Seiten Häppchen daherkam.

Auch wenn man in Vorschau PDFs per Hand zusammenfügen kann, ist das bei einer solchen Menge schlicht ineffizient.

Abhilfe kann schon ein selbstgestrickter Automator-Workflow schaffen, der hier zu beziehen ist.

Automator-1-2010-08-20-20-52.jpg

Man startet den Workflow wählt die zu kombinierenden PDFs aus und los geht’s.

ChooseaFinderItem-2010-08-20-20-52.jpg

Kleiner Hinweis: Die PDFs müssen dem (so wie ich es verstehe) nach dem Dateinamen in der richtigen Reihenfolge sortiert sein.

Danach startet Vorschau mit dem erstellten PDF. Da das PDF in einem Temp-Verzeichnis liegt, sollte man es einfach unter einem passenden Dateinamen speichern. Fertig.

Wer Probleme mit der verlinkten Version des Automatorskripts hat, kann sich bei gerne melden, um eine aktuelle, selbsterstellte Version des Workflows zu bekommen.

Donnerstag, 29. Juli 2010

Diskimage per AppleScript auswerfen

Noch ein kleiner Beitrag zum Thema auswerfen, diesmal Diskimages per Applescript. Der Sinn dahinter liegt freilich darin, das Auswerfen aus dem Applauncher eurer Wahl, Spotlight oder mit ein klein wenig mehr Aufwand auch per Hotkey auszulösen.

Zuerst zu einm simplen selbstgestrickten (per Copy&Paste-Engineering) Skript, das es erlaubt einzelne Diskimages unter Angabe des betreffenden Imagenamens auszuwerfen. Wenn man den Code ausführt oder als App speichert, sieht das so aus.

PastedGraphic-2010-07-29-15-33.jpg

set thePrefix to ""

set theDiskimage to ""

set theIcon to note

repeat

        display dialog thePrefix & "Enter name of disk image to eject:" default answer theDiskimage with icon theIcon

        set theDiskimage to text returned of result

        try

                if theDiskimage = "" then error

                exit repeat

        on error

                set thePrefix to "INVALID ENTRY! "

                set theIcon to stop

        end try

end repeat

tell application "Finder"

        if exists theDiskimage then

                do shell script "hdiutil detach \"/Volumes/" & theDiskimage & "\""

        else

                display dialog "Disk image \"" & theDiskimage & "\" does not exist."

        end if

end tell

Auch wenn dieses Skript macht was es soll, ist es doch letztlich nur eingeschränkt brauchbar. Zum einen muss man den Namen des auszuwerfenden Diskimages genau eingeben, was schon für sich ein großes Manko ist. Zum anderen kann man auch immer nur ein Diskimage auswerfen. Das Skript lässt sich dennoch so wie es ist verwenden oder als Grundgerüst für weiterführende Problemstellungen heranziehen.

Eine bessere Lösung habe ich schließlich im Netz gefunden, sodass ich nicht mehr selbst tätig werden musste. Hier ein Skript, das ich über MacOSXHints gefunden habe, das alle aktuell gemounteten Diskimages – auch bei schwierigen Fällen – auswirft. Sehr schön.

Montag, 21. Juni 2010

Action-Handler für Quicksilver anlegen. Beispiel 2: Remove PDF Restrictions und Code-Update für Droplet

Im ersten Artikel zu dem Thema habe ich das Warum und Wie zur Erstellung von eigenen Actions in Quicksilver beschrieben. Das Ganze ist, wie schon erwähnt, in Hinblick auf effiziente Bedienung zu lesen - aber auch in Bezug auf eine möglichst mauslose Bedienung des Macs. Siehe meinen Artikel dazu.

In diesem zweiten Beispiel soll es darum gehen, wie man einen Quicksilver-Action-Handler zum Entfernen von PDF-Restriktionen mittels muPDF macht.

Mit der Frage, wie man PDF-Sicherheitseinstellungen zurücksetzt, hatte ich mich schon beschäftigt und dazu ein AppleScript-Droplet vorgestellt. Dort steht auch, wo man muPDF bekommt.

Wenn es fertig ist, sieht der hier beschriebene Remove-Action-Handler in QS etwa so aus. (Ich habe gerade die ersten Buchstaben REMO.. im zweiten Feld von QS getippt.)

RemovePDFRestrictions-QS-Action-Handler-2010-06-21-22-57.jpg

Handlungsanweisung:

1. Man öffnen den AppleScript-Editor und füge folgenden Code ein und übersetzt ihn:

on open these_items

        set thePath to quoted form of POSIX path of these_items

        #catch errors if you want..

        do shell script "/Applications/Tools/mupdf/pdfclean " & thePath & " " & thePath & "_unrestricted.pdf"

end open

Anmerkung: Der Pfad zu muPDF muss je nach den eigenen Gegebenheiten angepasst werden.

2. Das Script speichert man als RemovePDFRestrictions.scpt ab (oder was einem gefällt).

3. Man kopiert die .scpt-Datei in seinem User-Verzeichnis nach ~/Library/Application Support/Quicksilver/Actions/

        (Der Ordner „Actions“ ist wahrscheinlich nicht vorhanden und muss erst angelegt werden.)

4. Quicksilver neu starten (Ctrl-Cmd-q) und schon steht die neue Aktion zur Verfügung. Siehe Bild oben.

Störrische PDFs, die sich zwar öffnen lassen, aber etwa das Drucken, Kommentieren oder Kopieren verweigern, können nun sanft überredet werden. Man übergibt diese Dateien vom Finder mit der Tastenkombination [Cmd]+[Esc] an Quicksilver.

Hier gibt es noch ein Code-Update zu dem vor mir erstellten Droplet. In dieser verbesserten Version lassen sich PDFs nicht mehr nur auf das AppleScript-Programm per Drag & Drop ablegen, sondern man kann die Anwendung nun auch einfach direkt starten und eine PDF-Datei zum Entsichern auswählen. (Das macht zwar den QS-Action-Handler praktisch sinnlos, aber das Ganze sollte vornehmlich ja auch nur ein Beispiel sein.)

Droplet-Code: CleanPDF. Das Vorgehen zum Erstellen des Droplets wird im alten Artikel beschrieben. Ich habe den Code auch dort geupdated.

-- if applet is double-clicked

set this to the POSIX path choose file with prompt "Select PDF-file to clean:"

set this_path to the POSIX path of this

#display dialog (this_path)

do shell script "/Applications/Tools/mupdf/pdfclean " & this_path & " " & this_path & "_unrestricted.pdf"

-- or if the file is drag and dropped

on open these

        repeat with this in these

                set this_path to the POSIX path of this

                #display dialog (this_path)

                do shell script "/Applications/Tools/mupdf/pdfclean " & this_path & " " & this_path & "_unrestricted.pdf"

        end repeat

end open

Have fun.

Freitag, 4. Juni 2010

Action-Handler für Quicksilver anlegen. Beispiele: Quick Look

Wer seinen Mac besonders effizient bedienen will, dem wird häufig Quicksilver – das Über-Launcher-App – empfohlen.

Für Quicksilver gibt es schon für sehr viele Extras, die man auch noch mit steuern könnte, Plugins – jedoch nicht für alles.

Eine Möglichkeit, wie man den eigenen Bedürfnissen mit QS näher kommen könnte, ist AppleScript.

Mit selbstgeschriebenen Skripten oder aus dem Netz kann man einfach vermisste Funktionen nachrüsten.

Für den Aufruf der eigenen Skripte in QS gibt es verschiedene Möglichkeiten.

Ich möchte hier „Action Handler“ für QS besprechen.

Action-Handler sind deshalb so nützlich in QS, da damit Operationen („Actions“) auf ausgewählte „Objekte“ im ersten Fenster anwenden kann.

QuicklookInQuicksilver-1-2010-06-4-23-23.jpg

Hier wird die Aktion „Quicklook“, unser Beispiel-Action-Handler, auf ein ausgewähltes PDF-Objekt in Quicksilver angewendet.

Nun zu einer kurzen Beschreibung, wie ich in die Erstellung von Action-Handlern gekommen bin.

Der Ausgangspunkt für meinen eigenen Action-Handler stellte der Artikel „Use Quick Look in Quicksilver“ dar.

Die dort angebotene Lösung für die Aufgabe (QL in QS^^) ist letztlich nicht sonderlich gut, aber alle relevanten Informationen waren für mich enthalten. Eine schönere Lösung, die ich hier gefunden haben, gab letztlich den Ausgangscode für meine Versuche ab.

Eine wirklich umfangreiche Liste von AppleScripts für QS lässt sich hier finden.

Man sollte dort leicht Code als Ausgangspunkt für eigene Projekte finden.

Handlungsanweisung: Wir bauen uns einen Quicklook-Action-Handler für Qucksilver

1. Man öffnen den AppleScript-Editor und füge folgenden Code ein:

on open these_items

        set these_paths to ""

        repeat with i from 1 to the count of these_items

                set these_paths to these_paths & space & (the quoted form of the POSIX path of (item i of these_items))

        end repeat

        do shell script "qlmanage -p " & these_paths & " &> /dev/null"

end open

Nun hat man etwas Code in seinem AppleScript-Editor, der sich - idealerweise - übersetzen lässt; sonst stimmt da was nicht. :)

2. Das Script speichert man als Quicklook.scpt ab (oder was einem gefällt).

3. Man kopiert die .scpt-Datei in seinem User-Verzeichnis nach ~/Library/Application Support/Quicksilver/Actions/

        (Der Ordner „Actions“ ist wahrscheinlich nicht vorhanden und muss erst angelegt werden.)

4. Quicksilver neu starten (Ctrl-Cmd-q).

Nun steht die neue QS-Action zur Verfügung. Siehe Bild oben.

Bitte um Kommentare, ob auch alles so wie beschrieben funktioniert.

Da der Beitrag schon recht lang ist, verfasse ich einen eigenen neuen Artikel zum zweiten Beispiel, in dem es darum geht, wie man aus dem von mir vorgestellten Droplet zum entfernen von PDF-Sicherheitsfunktionen einen Action-Handler macht.

Nun noch einige allgemeine Hilfestellungen:

Als Einstieg in QS hat mit dieser Beginner’s Guide geholfen.

Hier einige gesammelte Quick Tips von der Entwicklerseite.

Ein Setup Guide, der Helfen könnte, wenn man mit den von mir beschriebenen Handlungsanweisungen nicht weiter kommt.

Hier noch die Befehlsreferenz für Quicksilver.

Freitag, 23. April 2010

Applescript Droplet für MuPdfs pdfclean

Review PDFKey Pro

Kürzlich gab es bei MacUpdate das Programm PDFKey Pro zur Entfernung lästiger PDF-Restriktionen, die etwa das Kopieren von Text oder Drucken eines PDFs verhindern. Man darf jedoch PDF-Restriktionen bzw. Sicherheitseinstellungen nicht mit dem PDF-Passwort verwechseln. (Auch wenn der Name DPFKey lautet und der Text Unlock auf der Benutzeroberfläche von PDFKey Pro nahelegt, dass PDF-User-Passwöter entfernt werden, die das Öffnen / Betrachten verhindern können, wenn man das entsprechende Passwort nicht kennt.) Damit hat es allerdings nichts zu tun, sowie auch der alternative Ansatz weiter unten nicht.

screenshot-2010-04-23-23-54.jpg

Das heißt, wenn man das Besitzerpasswort nicht hat und die Datei nicht betrachtet werden kann, hat man keine Chance die Restriktionen weg zu bekommen.

(Die Lock-Funktion von PDFKey Pro allerdings setzt tatsächlich ein Eigentümer / Benutzerpasswort, mit dem Betrachter ohne Passwort ganz ausgesperrt werden. Etwas verwirrend, das Ganze.)

Die Demoversion von PDFKey entschlüsselt leider nur eine Seite, sodass man nur beschränkt testen kann, wie leistungsfähig die Software wirklich ist. Ich hatte den Eindruck, dass das Programm seine Arbeit gut macht. Ich habe kein PDF mit Restriktionen gefunden, die nicht entfernt werden konnten. Jedoch hatte ich bei verschiedenen PDFs das Problem, dass das neu angelegte, entschlüsselte PDF irgendwie umcodiert wurde und beim Kopieren von Text aus dem PDF komische Zeichen beim Einfügen im Zieldokument ankamen. Ob dies wie vermutet an einer Umcodierung liegt oder schon am ursprünglichen PDF, kann ich aber nicht sicher sagen. Sei es, wie es sei.

Ein Programm zum Entfernen von PDF-Restriktionen kann sehr nützlich sein. In der Regel wird es aber für die meisten Anwender so sein, dass man diese Art von Funktionalität nur ein paar Mal im Jahr braucht, wenn es hoch kommt. Und ob man sich dann ein Programm für 25 $ kaufen mag, ist sicher fraglich. Ab und an gibt es natürlich irgendwo eine Promoaktion oder ein Bundle, aber zum Vollpreis bin ich nicht an Board.

Do-it-yourself: PDF-Restriction-Cleaner Droplet

In MacUpdate-Forum hatte ein Benutzer darauf hingewiesen, dass man auch mit Hilfe von MuPDF, einer grob gesagt auf Ghostscript basierenden opensource PDF-Parsing-Library, die Restriktionen von PDFs entfernen könne. Und das stimmt auch.

Bei MuPDF für Mac OS X ist unter anderem das Kommandozeilenwerkzeugen pdfclean enthalten, dass genau diese Aufgabe erfüllt.

Hier noch ein vorher / nachher Bild eines mit pdfclean bearbeiteten PDFs:

restrictedpdf-2010-04-23-23-54.pngunrestrictedpdf-2010-04-23-23-54.png

Nach der Anwendung von pdfclean hat man die vollständigen Zugriffsrechte und das PDF kann geändert werden und Kommentare und Notizen (nativ) hinzugefügt werden.

Da die Bedienung von pdfclean vom Terminal aus aber nicht immer so viel Spaß macht, habe ich ein kleines AppleScript Droplet geschrieben, das die Sache noch einfacher macht. Im Folgenden findet sich eine verbesserte Version meines Codes wieder.

Handlungsanweisung: (Version 2)

  1. Man lade sich MuPDF, entpacken es und lege es an einem Ort seiner Wahl ab.
  1. Man nehme den AppleScript-Editor und füge folgenden Code ein und passen den Pfad „/Applications/Tools/mupdf/pdfclean“ nach den eigenen Gegebenheiten an:

-- if applet is double-clicked

set this to the POSIX path choose file with prompt "Select PDF-file to clean:"

set this_path to the POSIX path of this

#display dialog (this_path)

do shell script "/Applications/Tools/mupdf/pdfclean " & this_path & " " & this_path & "_unrestricted.pdf"

-- or if the file is drag and dropped

on open these

        repeat with this in these

                set this_path to the POSIX path of this

                #display dialog (this_path)

                do shell script "/Applications/Tools/mupdf/pdfclean " & this_path & " " & this_path & "_unrestricted.pdf"

        end repeat

end open

  1. Man übersetzte das Script (mit dem Hammer, ^_°) und speichere es unter einem gefälligen Namen, z.B. PdfClean, als „Programm“ im AppleScript-Editor.

PDFs können nun auf das neue Droplet-Programm per Drag&Drop abgelegt werden. Die neuen Dateien erscheinen an dem Ort an dem auch die Ausgangsdatei befindet mit dem Anhängsel _unrestricted.pdf.

Nachtrag: Mit der neuen, zweiten Version des Codes kann man das AppleScript-Programm nun auch direkt starten und dann einen zu Entsichernde PDF-Datei auswählen.

Select-PDF-file-to-clean-2010-04-23-23-54.jpg

Wer Probleme mit dem AppleScript-Editor hat, findet Hilfe in folgendem Video. Mir hat es geholfen.

Wer Ästhet ist, kann auch noch ein schickeres Logo für das neue Droplet - wie gewohnt bei Mac OS X Apps - vergeben. Hier ein Versuch von mir als PNG. Img2icns kann bei der Umwandlung in ein Mac Icon helfen.

PDF-Locked-128-2010-04-23-23-54.png

Viel Spaß damit.