Bug 20797

Summary: Хорошо бы отделить файлы с описаниями меню от всего остального
Product: Sisyphus Reporter: Anton V. Boyarshinov <boyarsh>
Component: gnome-menusAssignee: Yuri N. Sedunov <aris>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: aen, anubix, aris, lav, mike, msp, shrek, viy, zerg
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Удалятель всех кроме Office стандартных подменю GNOME
none
Переписанное меню Applications none

Description Anton V. Boyarshinov 2009-07-16 15:34:31 MSD
Хорошо бы отделить файлы с описаниями меню (*.menu) от всего остального (*directory, переводы), чтоб можно было создавать кастомизированные меню для дистрибутивов без хаков.
Comment 1 Alexey Rusakov 2009-07-16 16:33:31 MSD
Я правильно понял, что их хочется развести по разным пакетам?
Comment 2 Anton V. Boyarshinov 2009-07-16 16:40:55 MSD
(В ответ на комментарий №1)
> Я правильно понял, что их хочется развести по разным пакетам?

Да. Причём как-нибудь так, чтоб gnome-menus(с переводами) зависел от какого-нибудь абстрактного provides, который можно было бы провайдить gnome-menus(который с файлами) и на выбор другими пакетами.

Сейчас же либо меню по умолчанию либо отваливаются переводы секций...
Comment 3 Alexey Rusakov 2009-07-17 11:19:40 MSD
У кого-нибудь есть возражения, если я этим займусь (aris@, shaba@)?
Comment 4 Yuri N. Sedunov 2009-07-17 13:50:57 MSD
(In reply to comment #3)
> У кого-нибудь есть возражения, если я этим займусь (aris@, shaba@)?
У меня нет. Шабалин, видимо, уже не ответит, ибо в отпуске.
Comment 5 Alexey Rusakov 2009-07-19 20:53:44 MSD
Так, а кто-нибудь может мне объяснить сложную взаимосвязь .menu-части пакетов altlinux-menus и gnome-menus?
Comment 6 Alexey Rusakov 2009-07-19 23:52:07 MSD
Взаимосвязь altlinux-menus и gnome-menus стала понятнее, но теперь возник новый вопрос, который я лучше положу в отдельный баг.
Comment 7 Alexey Rusakov 2009-07-20 01:43:14 MSD
Ну и наконец, по существу бага. В общем, я понял твою беду: тебе нужно устроить совсем могучий локдаун, поэтому советовать писать override где-нить в /etc/xdg/menus/applications-merged/, пожалуй, не буду - замучаешься :) Как назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде правильно...
Comment 8 Anton V. Boyarshinov 2009-07-21 15:29:44 MSD
(В ответ на комментарий №7)
> Ну и наконец, по существу бага. В общем, я понял твою беду: тебе нужно устроить
> совсем могучий локдаун, поэтому советовать писать override где-нить в
> /etc/xdg/menus/applications-merged/, пожалуй, не буду - замучаешься :) 
Ну, собственно это тоже вариант, но я не совсем понял как им воспользоваться. Так, чтоб не писать в "чужие" файлы.

> Как
> назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде
> правильно...
почему бы и нет?
Comment 9 Alexey Rusakov 2009-07-22 05:50:35 MSD
Я таки сделал оверрайд. Если интересно, как, можно почитать дальше. На самом деле всё относительно просто, но пункт 2 отдаёт грязным хаком, хоть я и попытался его отмыть. Вероятно, правильнее всё-таки отключать создание иерархии меню целиком через вынос этой иерархии в отдельный пакет, о чём и баг.

Итак, задача: сделать меню "Приложения" одноуровневым, состоящим из Firefox, GCalcTool и компонентов OOo минус OOo Math. Ни один из существующих файлов не меняется.

1. Я использую то, что в нынешнем /etc/xdg/menus/applications.menu включается файлик applications-menueditor.menu, который в умолчальной конфигурации, по крайней мере у меня - отсутствует. Вообще-то я бы хотел воспользоваться applications-alt.menu, но он, к сожалению, застолблен пакетом altlinux-menus, и что самое обидное, при этом содержит лишь один пустой тег. Наверное, по нонешним временам это баг.

2. Поскольку applications.menu из пакета gnome-menus (который сейчас лежит в /etc/gnome/xdg - далее я его называю gnome-applications.menu) создаёт иерархию меню, нам нужно эту иерархию обратно удалить. Никаких тотальных действий для этого в menu-spec я не нашёл, поэтому выполняю следующий скрипт (его можно сделать лучше, но смысл...):
#!/bin/sh
{
  head -2
  echo '<Menu><Name>Applications</Name>'
  awk -F: '/<Name>.*<\/Name>/ && ! /<Name>Applications<\/Name>/ && ! /<Name>Office<\/Name>/ { print "<Menu>\n" $0 "\n<Deleted/></Menu>" }'
  echo '</Menu>'
} <gnome-applications.menu >delete-menus-except-office.menu
- после чего кладу delete-menus-except-office.menu в /etc/xdg/menus и делаю ему <MergeFile> в applications-menueditor.menu (можно не мержить явным образом, а положить в applications-merged, но это рискованно).

Всё это я делал в предположении, что мусорных (тех которые не надо показывать) .desktop файлов до фига. Если их не до фига, то вместо удаления всех меню можно пройтись по ним и поставить <Exclude> на те файлы, которые не нужны (а ещё лучше удалить пакеты с ними, конечно). Пустые меню будут автоматически скрыты (по крайней мере, таковы умолчания сейчас).

3. Добавляю через <Include> дополнительные элементы и удаляю через <Exclude> OOo Math.

4. Мне не нужно меню Office (пусть всё лежит на верхнем уровне), поэтому я добавляю перед </Menu> верхнего уровня такую строчку:
<DefaultLayout inline="true" inline_limit="10"/><!--разворачивать меню меньше 10 пунктов -->

С меню settings ("Система") примерно такая же картинка, только там сейчас не вмерживается settings-alt.menu, зато (согласно menu-spec; на текущем GNOME проверено, работает) можно создать каталог settings-merged/, положить в него файл с оверрайдом и всё будет так же. Но с этим каталогом есть одна деталь, которую нужно учитывать: оттуда мержится всё подряд в произвольном порядке (эффект тега <DefaultMergeDirs/>).

Что плохо в этом подходе:
1. "Шей да пори - не будет пустой поры" - сначала создаём меню, потом удаляем...
2. Мне не удалось расположить файлы выше, чем содержимое меню. Подозреваю, что из-за DefaultLayout и Layout, описанных в /etc/xdg/menus/applications.menu, и я уже не уверен, что это хорошо.

Файлы сейчас приаттачу.
Comment 10 Michael Shigorin 2009-07-25 11:29:01 MSD
(In reply to comment #7)
> Как назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде
> правильно...
gnome-menu-base/common?
Comment 11 Alexey Rusakov 2009-07-25 13:42:35 MSD
Ну, это не -base и не -common. -common как раз будет в основном пакете, если так можно выразиться,- локали и файлы .directory. Кстати, это мысль, надо над ней тоже подумать.
Comment 12 Alexey Rusakov 2009-07-25 14:59:58 MSD
Ещё немного подумав и посмотрев, я решил сделать вот как:
1. gnome-menus-common - содержит только локализации (пока, по крайней мере)
2. gnome-menus-default - содержит штатное (апстримовое) меню GNOME (то есть файлы .menu и .directory - поскольку .menu ссылаются на .directory файлы, нет смысла их разделять по пакетам - разве только если захочется использовать те же названия меню, но не использовать структуру - но это, извините, уже граничит с извращением).
gnome-menus-default требует gnome-menus-common, провайдит gnome-menus и обсолетит gnome-menus меньше той версии, которая сейчас в Сизифе. Любой branding-whatever-gnome-settings тоже требует gnome-menus-common и провайдит gnome-menus. Если хочется аккуратности, то пакеты branding-*-gnome-settings должны конфликтовать с gnome-menus-default и друг с другом.
Но как по мне -  это деление всё равно отдаёт искусственностью, так что лучше почитать моё письмо в devel@ с темой RFC: XDG menus и согласиться с ним :)
Comment 13 Michael Shigorin 2009-07-25 17:45:30 MSD
Ну я-то не нашёл, с чем там не согласиться.
Comment 14 Zerg 2009-07-27 20:10:04 MSD
(В ответ на комментарий №9)
> Вообще-то я бы хотел воспользоваться
> applications-alt.menu, но он, к сожалению, застолблен пакетом altlinux-menus,
Не он в пакете menu. Раньше я туда структуру, вроде, генерировал из menu-файлов. Уже не помню точно.
Comment 15 Alexey Rusakov 2009-07-27 20:51:30 MSD
Ах да, файлы-то я и забыл. Если кому-то ещё интересно, то вот.
Comment 16 Alexey Rusakov 2009-07-27 20:54:44 MSD
Created attachment 3698 [details]
Удалятель всех кроме Office стандартных подменю GNOME
Comment 17 Alexey Rusakov 2009-07-27 20:57:23 MSD
Created attachment 3699 [details]
Переписанное меню Applications

...состоящее из содержимого подменю Office (кроме OOo Math), Firefox и GCalcTool.
Comment 18 Alexey Rusakov 2009-07-28 01:52:51 MSD
Файлы .menu и файлы .directory вынесены в пакет gnome-menus-default, файлы с локалями теперь лежат в gnome-menus-common. Кастомизируйте на здоровье. Если хочется использовать штатное меню, но его слегка поменять, кладите файлы .menu в каталог /etc/xdg/menus/applications-merged/. Если нужно полностью заменить меню, выкидывайте gnome-menus, ставьте в свой branding-пакет Provides: gnome-menus и пишите собственный неповторимый файл /etc/xdg/menus/gnome-applications.menu. Отныне Provides: gnome-menus в branding-пакетах хаком не является.