Jag har tagit det här tillfället för att lära mig mer om Applescript så scriptet blir lite mer avancerat.
--då osascript inte klarar att ta emot strängar med flera rader sätter jag detta istället för return och ersätter detta med en sed efter osascriptet.
set endOfLine to "ZaZaZaZaZ"
--antal låtar att visa innan nuvarande låt
set listBefore to 4
--antal låtar att visa efter nuvarande låt
set listAfter to 5
--vad som står mellan låtnamnet och artisten, kan ändras till t.ex; tab, " - ", " ", ": "
set songArtistSeparator to endOfLine & tab & tab
--kolla om iTunes körs, om inte avsluta med "iTunes is not playing"
tell application "System Events"
if (name of processes) does not contain "iTunes" then
return "iTunes is not playing"
end if
end tell
--de "playlists" som skriptet inte stöder
set dontList to {"Radio", "Podcaster"}
tell application "iTunes"
if player state is stopped then return "iTunes is not playing"
--en trysats för att current playlist är inte alltid definierad. T.ex. finns den inte när man använder iTunes Store
try
if name of current playlist is in dontList then return "iTunes is not playing a playlist"
--lite hjälpvariabler
set nowIndex to 0
set i to 0
set wholeList to {}
--hitta indexet på låten som spelas och formatera wholeList
repeat with bar in tracks of current playlist
set i to i + 1
if name of bar is name of current track then set nowIndex to i
set end of wholeList to name of bar & songArtistSeparator & artist of bar
end repeat
--kontrollera så att vi inte försöker hämta låtar utanför spellistan
if (nowIndex - listBefore) < 1 then set listBefore to nowIndex - 1
if (nowIndex + 1 + listAfter) > length of wholeList then set listAfter to ((length of wholeList)) - nowIndex - 1
--hämta låtar före och efter nuvarande
set beforeList to items (nowIndex - listBefore) thru (nowIndex - 1) of wholeList
set afterList to items (nowIndex + 1) thru (nowIndex + 1 + listAfter) of wholeList
--för att byta vad AppleScript sätter mellan items i listor vid to string
set AppleScript's text item delimiters to endOfLine & tab
--returnera klabbet
return ((tab & beforeList as string) & endOfLine & "->" & tab & name of current track & afterList as string)
end try
return "iTunes is not playing a playlist"
end tell
Kommentarerna i scriptet borde förklara de mesta.
Jag ändrade utseendet lite på outputen mest för att visa hur det kan se ut. För att byta tillbaka till det förra utseendet så ändra värdet på songArtistSeparator till " - " eller tab istället.
Ett varningens finger!
Om du har långa spellistor eller spelar direkt ur biblioteket så kommer skriptet att ta ganska lång tid. Nu har jag iofs en mycket gammal dator att utveckla på, en ibook med en G3 på 300Mhz (första dasslocket! ). Så för er med maskiner från detta århundrade är det troligtvis ingen problem...
Ytterligare tips:
Kom ihåg att ändra uppdateringsfrekvensen i GeekTool, heter refresh och ligger uppe till höger i GeekToolfönstret. Jag har för mig att 10 är default och då det är sekunder är det lite slöseri med datorresurser så sätt den till en 30 eller nått sådant.