Хорошо бы отделить файлы с описаниями меню (*.menu) от всего остального (*directory, переводы), чтоб можно было создавать кастомизированные меню для дистрибутивов без хаков.
Я правильно понял, что их хочется развести по разным пакетам?
(В ответ на комментарий №1) > Я правильно понял, что их хочется развести по разным пакетам? Да. Причём как-нибудь так, чтоб gnome-menus(с переводами) зависел от какого-нибудь абстрактного provides, который можно было бы провайдить gnome-menus(который с файлами) и на выбор другими пакетами. Сейчас же либо меню по умолчанию либо отваливаются переводы секций...
У кого-нибудь есть возражения, если я этим займусь (aris@, shaba@)?
(In reply to comment #3) > У кого-нибудь есть возражения, если я этим займусь (aris@, shaba@)? У меня нет. Шабалин, видимо, уже не ответит, ибо в отпуске.
Так, а кто-нибудь может мне объяснить сложную взаимосвязь .menu-части пакетов altlinux-menus и gnome-menus?
Взаимосвязь altlinux-menus и gnome-menus стала понятнее, но теперь возник новый вопрос, который я лучше положу в отдельный баг.
Ну и наконец, по существу бага. В общем, я понял твою беду: тебе нужно устроить совсем могучий локдаун, поэтому советовать писать override где-нить в /etc/xdg/menus/applications-merged/, пожалуй, не буду - замучаешься :) Как назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде правильно...
(В ответ на комментарий №7) > Ну и наконец, по существу бага. В общем, я понял твою беду: тебе нужно устроить > совсем могучий локдаун, поэтому советовать писать override где-нить в > /etc/xdg/menus/applications-merged/, пожалуй, не буду - замучаешься :) Ну, собственно это тоже вариант, но я не совсем понял как им воспользоваться. Так, чтоб не писать в "чужие" файлы. > Как > назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде > правильно... почему бы и нет?
Я таки сделал оверрайд. Если интересно, как, можно почитать дальше. На самом деле всё относительно просто, но пункт 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, и я уже не уверен, что это хорошо. Файлы сейчас приаттачу.
(In reply to comment #7) > Как назвать пакет? gnome-menus-structure не очень нравится, хотя по сути вроде > правильно... gnome-menu-base/common?
Ну, это не -base и не -common. -common как раз будет в основном пакете, если так можно выразиться,- локали и файлы .directory. Кстати, это мысль, надо над ней тоже подумать.
Ещё немного подумав и посмотрев, я решил сделать вот как: 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 и согласиться с ним :)
Ну я-то не нашёл, с чем там не согласиться.
(В ответ на комментарий №9) > Вообще-то я бы хотел воспользоваться > applications-alt.menu, но он, к сожалению, застолблен пакетом altlinux-menus, Не он в пакете menu. Раньше я туда структуру, вроде, генерировал из menu-файлов. Уже не помню точно.
Ах да, файлы-то я и забыл. Если кому-то ещё интересно, то вот.
Created attachment 3698 [details] Удалятель всех кроме Office стандартных подменю GNOME
Created attachment 3699 [details] Переписанное меню Applications ...состоящее из содержимого подменю Office (кроме OOo Math), Firefox и GCalcTool.
Файлы .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-пакетах хаком не является.