[devel] MIME Revolution!
Igor Vlasenko
vlasenko на imath.kiev.ua
Ср Апр 13 21:33:42 UTC 2011
Уважаемые коллеги!
Обращаюсь к вам с просьбой помочь сделать доброе дело, за которое
вам будет большая благодарность от простых пользователей наших
дистрибутивов: всех наших жен, дедушек, бабушек, внучек, жучек,
учителей, бухгалтеров, и других простых пользователей.
Более того, для простых пользователей это будет "killer feature",
которой могут похвастаться весьма немногие дистрибутивы,
если вообще могут. А вот мы сможем похвастать.
И с чистой совестью сказать, что у нас круче ;)
Речь идет о наведении порядка с умолчаниями MIME.
Сейчас мы в целом живем без каких-либо умолчаний,
Устаревшие KDE InitialPreference и героические попытки в
xfce-settings-* паковать костыли в /etc/skel/.local не в счет,
так как они погоды не делают.
Текущую ситуацию можно назвать MIME Hell:
это ситуация, когда для открытия pdf файла может быть вызван gimp,
а для открытия html странички или видеофильма -- wine.
За последнее, кстати, в https://bugzilla.altlinux.org/25214
wine забивали, как мамонта. При чем по сути дела wine не виновато,
хотя, конечно, установка в .local is a bit extreme, в /usr все же
корректнее, но по сути виноват дистрибутив, в котором отсутствуют
разумные умолчания mime.
стандарты freedesktop.org, к сожалению, далеки от идеала, но
там все же попадаются здравые идеи. Не прошло и трех лет, как
libgio начала поддерживать mimeapps.list. Это списки desktop файлов,
которыми рекомендуется открывать данный тип mime, отсортированные
в порядке релевантности приложения типу.
Я хочу создать и поддерживать актуальный файл mimeapps.list для
Сизифа. Это должен быть общесистемный, DE-нейтральный файл.
DE-специфическую настройку лучше осуществлять, манипулируя в
скрипте startDE переменной $XDG_DATA_DIRS и подкладывая туда
DE-специфические defaults.list.
Я начал с того, что, используя технологии репокопа, сгенерировал из
desktop файлов актуальную неотсортированную болванку для mimeapps.list.
получился достаточно жуткий файл mimeapps.raw с 381 mime типом,
и для каждого mime типа внушительный список desktop файлов, которые надо
отсортировать. В таком виде получается жуткая задача, на такой файл
придется угробить человеко-месяцы, а результат будет невозможно
поддерживать. Поэтому мысль сразу же пошла по unix-way.
Я решил генерировать mimeapps.list из человекодружественных
файлов priorities, с 3-мя или 4-мя колонками,
разделенными любым числом пробельных символов
первая колонка это freedesktop desktop id:
для /usr/share/applications/foo.desktop это будет просто foo.desktop,
а вот для /usr/share/applications/kde/kdict.desktop это kde-kdict.desktop.
вторая колонка это mime тип. Фишка в том, что там разрешаются shell glob:
третья колонка -- приоритет, 4-я опциональная - зарезервирована для
спец, настроек приоритета, вида GNOME=30;LXDE=100; пока не используется.
Если приоритет >0, то файл будет вписан под [Added Associations].
Если приоритет <0, то файл будет забанен в [Removed Associations].
Пример
priorities/50-office:
-----------------------------------------------------------------------
desktop файл mime типы приоритет резерв
-----------------------------------------------------------------------
abiword.desktop application/* 10
kde4-kword.desktop application/* 50
openoffice.org-writer.desktop application/* 90
writer.desktop application/* 100
Из этого 4-х строчного файла при генерации получается 27 строк в mimeapps.list.
Если globbing или спец.настройки не требуются, то готовые кусочки mimeapps.list
можно складывать в файл mimeapps.in.
Я выложил код генерации в people/viy/packages/altlinux-mime-defaults.git,
в README описано, как происходит генерация.
Делаем как в README (качаем
wget -c http://repocop.altlinux.org/pub/repocop/data/freedesktop-desktop.db
пускаем ./generate_mimeapps)
получаем текущий mimeapps.list, mimeapps.status (там критикуется
mimeapps.list, рассказывается, что в нем не хватает) и mimeapps.raw.
mimeapps.raw -- это несортированная заготовка для mimeapps.list.
Сделав
$ grep 'audio.*=' mimeapps.raw | grep -v 'midi.*=' | \
sed -e 's,^.*=,,' | perl -npe 's/;/\n/g' | sort -u
получим список из 52 обработчиков аудио, которые надо отсортировать по релевантности.
Господа!
1) Нужен доброволец, который любит музыку и разбирается в плеерах,
чтобы выписать приоритеты для плееров в файле priorities/50-audio.
Вот список.
alsaplayer.desktop
audacious2.desktop
audacious2-gtkui.desktop
audacity.desktop
avidemux.desktop
banshee-1-audiocd.desktop
banshee-1-media-player.desktop
brasero.desktop
clementine.desktop
deadbeef.desktop
decibel-audio-player.desktop
easytag.desktop
exaile.desktop
falf.desktop
foobnix.desktop
gnome-banshee-1.desktop
gnome-mplayer.desktop
gvim.desktop
kde4-amarok.desktop
kde4-kaffeine.desktop
kde4-kid3.desktop
kde4-kmid.desktop
kde-amarok.desktop
kde-juk.desktop
kde-kaffeine.desktop
kde-kmid.desktop
kde-kmplayer.desktop
kid3.desktop
listen.desktop
miro.desktop
mkvinfo.desktop
mkvmerge-gui.desktop
mplayer.desktop
muine.desktop
parole.desktop
pragha.desktop
qmmp.desktop
qmmp_enqueue.desktop
rhythmbox.desktop
rhythmbox-device.desktop
rosegarden.desktop
smplayer.desktop
smplayer_enqueue.desktop
songbird.desktop
soundconverter.desktop
sound-juicer.desktop
soundtracker.desktop
totem.desktop
vlc.desktop
xine.desktop
xmms.desktop
Если какого-то плеера в списке нет, это значит, что в его .desktop
файле не прописаны mime типы. В таком случае надо еще вешать баги
на такой плеер.
3) Нужен доброволец отсортировать видео плееры по релевантности.
3) Нужны добровольцы на другую сортировку: IDE, архиваторы,
редакторы, ... см. mimeapps.status
--
Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine
Подробная информация о списке рассылки Devel