GeekToolЗаметка про GeekTool оказалась довольно востребованной. Поэтому я решил немного развить тему и рассказать о других способах работы с программой. Если появятся какие-то вопросы — смело задавайте.

Работа с iTunes

Читатель mixazen интересуется, как вывести на рабочий стол название проигрываемой песни. Эта задача состоит фактически из двух подзадач — надо как-то получить от iTunes название композиции, а затем с помощью GeekTool отобразить его на рабочем столе.

На форумах Macrumors я нашел следующий скрипт:


property go1 : false
-- check to see if iTunes is running
tell application "System Events"
	set the process_flag to (exists process "iTunes")
end tell
if the process_flag then
	-- check to see if iTunes is playing
	tell application "iTunes"
		if player state contains playing then set go1 to true
	end tell
	if go1 then
		-- do what you need to do
		tell application "iTunes"
			set foo1 to name of current track
			set foo2 to artist of current track
			set foo3 to album of current track
			set foo4 to foo1 & " / " & foo2 & " / " & foo3
		end tell
	end if
end if

Сохраните его, дав произвольное имя и указав расширение scpt (файл Applescript). Затем запустите GeekTool, создайте новый Гиклет (как это сделать, говорилось в предыдущей статье). В разделе Command укажите следующую команду:

osascript /путь/до/скрипта/itunes.scpt

osascript — это команда выполнения скрипта AppleScript. Остается выбрать промежуток обновления (раз в 5 секунд будет вполне достаточно) и поэкспериментировать с оформлением. Скрипт нормально работает с последней версией iTunes и корректно отображает названия русскоязычных песен. Можно пойти еще дальше и, например, вывести на рабочий стол прогресс-бар проигрываемой песни. Но это перебор, на мой взгляд.

Выводим обложку альбома проигрываемой песни на рабочий стол

GeekTool — удивительно мощная штука. Возможности, которые предоставляет программа, ограничены разве что фантазией пользователей. Изучая примеры использования, натолкнулся на статью Доктора Дрэнга (Dr. Drang), который с помощью GeekTool выводит на рабочий стол обложку альбома. После получаса разбирательств мой рабочий стол выглядит так (напомню, что у меня установлены GeekTool 3.0 RC5 и iTunes 9.0.2):

А теперь о том, как вывести на рабочий стол обложку композиции, которая проигрывается в настоящий момент в iTunes. Для этого нам понадобится написать AppleScript и сделать пару гиклетов.

Код AppleScript выглядит следующим образом:


-- Paths and stuff
set ArtworkFromiTunes to ((path to home folder) as text) & ¬
  "Pictures:iTunes Artwork:From iTunes:albumArt.pict" as alias
set iTunesArtwork to ((path to home folder) as text) & ¬
  "Pictures:iTunes Artwork:From iTunes:albumArt.pict"
set DefaultArtwork to ((path to home folder) as text) & ¬
  "Pictures:iTunes Artwork:Default:albumArt.pict"
set displayArtwork to ((path to home folder) as text) & ¬
  "Pictures:iTunes Artwork:albumArt.pict"

-- Unix versions of the above path strings
set unixITunesArtwork to the quoted form of POSIX path of iTunesArtwork
set unixDefaultArtwork to the quoted form of POSIX path of DefaultArtwork
set unixDisplayArtwork to the quoted form of POSIX path of displayArtwork

set whichArt to "blank"
tell application "System Events"
  if exists process "iTunes" then -- iTunes is running
    tell application "iTunes"
      if player state is playing then -- iTunes is playing
        set aLibrary to name of current playlist -- Name of Current Playlist
        set aTrack to current track
        set aTrackArtwork to null
        if (count of artwork of aTrack) ≥ 1 then -- there's an album cover
          "Running and playing and art"
          set aTrackArtwork to data of artwork 1 of aTrack
          set fileRef to ¬
            (open for access ArtworkFromiTunes with write permission)
          try
            set eof fileRef to 512
            write aTrackArtwork to fileRef starting at 513
            close access fileRef
          on error errorMsg
            try
              close access fileRef
            end try
            error errorMsg
          end try

          tell application "Finder" to ¬
            set creator type of ArtworkFromiTunes to "????"
          set whichArt to "iTunes"
        end if
      end if
    end tell
  end if
end tell

if whichArt is "iTunes" then
  do shell script "ditto -rsrc " & unixITunesArtwork & space & unixDisplayArtwork
else
  do shell script "ditto -rsrc " & unixDefaultArtwork & space & unixDisplayArtwork
end if

Сохраните файл с именем iTunesArtwork.scpt. Вы также можете скачать его с сайта «Макрадара». Файл лучше поместить в папку ~/Library/Scripts, хотя это не принципиально.

Теперь создаем первый гиклет. Щелкаете по значку Shell, перетаскиваете его на рабочий стол, а в качестве команды, указываете эту:

osascript ~/Library/Scripts/iTunesArtwork.scpt

Гиклет вызывает AppleScript и больше ничего не делает. Поэтому тратить время на форматирование не надо. Укажите лишь интервал вызова — 5–10 секунд вполне достаточно.

Затем в папке ~/Pictures создайте подпапку iTunes Artwork со следующей структурой:

structure

Эту структуру надо воспроизвести в точности. Создайте папки From iTunes и Default. В них поместите файл albumArt.pict, созданный в любом графическом редакторе. Файл albumArt.pict используется в тех случаях, когда iTunes ничего не играет или у альбома отсутствует обложка. Поэтому albumArt.pict делают размером 1х1 пикселей и закрашивают цветом, совпадающим с цветом обоев рабочего стола (чтобы не оздавалось впечатления «битого пикселя»).

Теперь надо создать еще один гиклет. Щелкните по значку Picture, перетащите его на рабочий стол. В поле file укажите:

file:///Users/путь_к_файлу/Pictures/iTunes%20Artwork/albumArt.pict

Укажите интервал обновления (5-10 сек) и размер картинки (я выбрал 200х200 точек).

Если захотите выводить на рабочий стол обложку альбомов, имейте в виду: у GeekTool сразу возрастает аппетит к памяти. Вместо привычных 30-40 Мб ОЗУ, он начинает требовать 300 Мб. Для современных компьютеров, оснащенных 4 и более гигабайтами оперативки это практически на ощутимо, для старых макбуков с лимитов в 2 Гб — уже повод задуматься, так ли уж необходимы эти «свистелки». На всякий случай в угол десктопа можно отдельным гиклетом выводить информацию об объеме ОЗУ, используемом GeekTool. Команда такая:

ps axo "rss,ucomm" | awk '/Geek/ {printf "%.2f", $1/1024}'

***

В этих двух примерах мы выводили на рабочий стол как текстовые данные, так и картинки. Еще раз подверкну: GeekTool — фантастическое приложение. Я продолжаю экспериментировать с ним ежедневно. Уже пробовал выводить на рабочий стол статистику Li.ru одного из сайтов, твиты и погоду. :-)

Если у вас есть какие-то вопросы или уточнения, буду рад увидеть их в комментариях. Делитесь результатами своих экспериментов, интересно узнать о вашем опыте.

Обновлено. Полезная ссылка от Сергея Тугаринова — подборка скриптов для GeekTool

***

Полезные ссылки: