[Comm] Q/A: %update_menus

php-coder php-coder на ngs.ru
Пн Окт 18 13:31:44 MSD 2004


0000100101011110100100101::18.10.2004::0110001001001000100111100100010

  Привет, Linuxоиды!

  Я тут разобрался с тем, как "подружить" программу с системным меню
  ALTLinux и решил обобщить все, что мне удалось узнать в форме
  "вопрос-ответ". Я надеюсь, что никто не будет против, что я запостил
  его сюда. Я был бы очень рад, если бы эта информация показалось бы
  кому-нибудь полезной...
  
  Q: Как добавить программу в меню?

  A: В ALTLinux существует общесистемное меню. Оно заимствовано из
  Debian и представляет собой меню, которое не зависит от какого-либо
  конкретного оконного менеджера, т.е. оно является универсальным. Все
  (__FIXME__: все ли?) менеджеры окон в ALTLinux имеют поддержку
  общесистемного меню. Это значит, что, внезависимости от того
  используете ли вы KDE, Gnome, XFCE, IceWM, Fluxbox или любой другой
  оконный менеджер, редактор gvim вы всегда сможете найти в
  Приложения->Редакторы.

  Для того, чтобы ваша программа стала доступной в этом меню, нужно
  сделать следующее:
  
  - поместить файл с описанием программы в /usr/lib/menu/имя_программы
  - обновить системное меню, вызвав update-menus

  Файл с описанием программы состоит из нескольких строк, имеющих
  следующий формат:

  ?package(имя_пакета):\
          переменная1=значение1 \
          переменная2=значение2

  Какие переменные бывают и какие значения они могут принимать:

  needs -- где может запускаться данная программа: в иксах (x11),
  в любом текстовом терминале (text) или только в консоли (vc).
  Также возможны значения wm, fvwmmodule и fvwm2module. Первое
  значение используется для запуска другого оконного менеджера (т.е.
  вы добавляете описание своего WM и он стнет доступен для запуска в
  других оконных менеджерах). Также, в качестве значения, возможно
  указать имя оконного менеджера для того, чтобы данная программа
  отображалась в меню только этого менеджера окон. Это удобно
  использовать для разных специфичных программ и встроенных в WM
  комманд, таких как завершить сеанс, перечитать настройки или
  перезапустить менеджер окон. Вторые два значения используются для
  модулей, совместимых с fvwm версии 1.x и 2.x соответственно.

  section -- секция в которой будет располагаться программа. Доступные
  следующие предопределенные значения:

  __FIXME__: Здесь должен быть _полный_ список значений, принимаемый
  переменной section.

  icon -- название иконки, которое будет соответствовать пункту меню
  с данной программой. Иконка должна располагаться в /usr/share/icons
  (__FIXME__: возможно  также и в /usr/share/icons/mini?) и
  удовлетворять следующим условиям:
  
     - размер не больший чем 32x32 пикселей
     - формат xpm или png (__FIXME__: может быть какой-нибудь еще?)
     - использовать не более 24 цветов
     - по возможности иметь прозрачный фон

  title -- название программы, которое будет отображаться в меню
  (максимум два слова)

  longtitle -- описание программы (одно предложение)

  sort -- используется для того, чтобы явно указать местоположение
  пункта в секции. Значением является число. Если оно начинается с
  символа '$', то пункт будет находиться на указанном месте от начала
  секци. Если же с символа '|', то отсчет будет вестись с конца секции.
  Пример: sort=|2 -- пункт будет вторым снизу. (__FIXME__: у меня
  почему-то не всегда все сортируется как нужно :(( Особенно от
  начала секции... :(()

  command -- комманда, которая будет выполнена при выборе этого пункта
  меню. Путь, лучше всего, указывать абсолютный, а не полагаться на
  $PATH, т.к. вполне возможно, что эта же программа другой версии будет
  установлена в /usr/local/bin и тогда запускаться будет именно она, а
  не программа, установленная из вашего пакета.

  hotkey -- __FIXME__: незнаю что написать, так как у меня ничего не
  заработало и я не совсем ясно представляю себе для чего этот парметр :))

  hints -- __FIXME__: примерно представляю себе для чего это, но лично
  не использовал, да и в ALTLinux, как я понял, функция группировки меню
  отключена (hints_optimize=false по умолчанию).

  Следующим вашим шагом будет добавление нескольких строчек в spec-файл:

  ...
  SourceN: %name.menu
  ...
  %install
  ...
  %__mkdir_p %buildroot%_menudir
  %__mv %SOURCEN %buildroot%_menudir/%name
  ...
  %post
  %update_menus
  ...
  %postun
  %clean_menus
  ...
  %files
  ...
  %_menusdir/*

  Этим самым мы позаботились о том, чтобы наш menu-файл оказался в
  /usr/lib/menu и о том, чтобы после установки/удаления пакета обновлялось
  системное меню.

  Подробности вы всегда сможете найти в man 5 menufile и в
  /usr/share/doc/menu-%version/*

-- 
  С уважением, php-coder (mailto:php-coder[at]ngs[dot]ru)
  Registered Linux User #327594
  ALT Linux Master 2.2 (kernel 2.4.27)

010010010010010001010101100::Linux RuleZz!::10001001000100010001000111



Подробная информация о списке рассылки Community