Сайт | Скачать | Видео | Wiki

Автор Тема: Построитель меню JWM на C  (Прочитано 29630 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Построитель меню JWM
« Ответ #90 : 22 Февраль 2016, 19:37:23 »
Ох, сколько успели написать  :)  А мне и сесть за компьютер весь день некогда было  :)

Исходник на гитхабе выложил: https://github.com/andreyrogojin/menu/
Последние исправления:
Добавил фильтрацию по OnlyShowIn=, если эта строчка есть, а JWM в ней нет, файл пропускается.
Длину извлекаемой строки увеличил, чтобы не обрезало.
Полные пути и расширения у иконок теперь удаляются.
Ну и прошелся по всяким возможным случаям переполнения, добавил проверки, чтобы ругалось, а не глючило.

В аттаче исходник и бинарники под 32 и 64 бита.
Под 32 типичное время выполнения примерно 0.1 секунды, под 64 в четыре раза быстрее, почему такая большая разница, не знаю.
« Последнее редактирование: 22 Февраль 2016, 20:00:14 от ander »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #91 : 22 Февраль 2016, 19:51:16 »
 Убрал отображение пустых категорий. (см. стр. 109, 116)
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Построитель меню JWM
« Ответ #92 : 22 Февраль 2016, 19:59:34 »
Задвоение в меню из-за того, что и в /usr/share/applications, и в /usr/local/share/applications есть файлы с одинаковыми именами, Зачем так сделано? Вопрос наверно к sfs.
Вероятно настраивал mime. Если второй не пустой - возможно просто ошибка

OnlyShowIn=, если эта строчка есть, а JWM в ней нет, файл пропускается.
https://specifications.freedesktop.org/menu-spec/latest/apb.html
JWM там не должно быть - наверное Old

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Построитель меню JWM
« Ответ #93 : 22 Февраль 2016, 20:19:23 »
Убрал отображение пустых категорий. (см. стр. 109, 116)
Да, логично.  Добавил.

https://specifications.freedesktop.org/menu-spec/latest/apb.html
JWM там не должно быть - наверное Old
Исправил на Old, хотя в данном случае, вероятно, не принципиально, лишь бы предназначенные только для XFCE файлы отсеялись.
« Последнее редактирование: 22 Февраль 2016, 20:38:16 от ander »

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Построитель меню JWM
« Ответ #94 : 22 Февраль 2016, 23:45:27 »
Еще пожелания по jwmtst, т.к. сам C не знаю и могу только чуть-чуть поправить готовый исходник и то не всегда  ::)

1. Категории желательно расположить по алфавиту. У себя поправил, получился вид, как в предыдущих версиях меню. Это строки 33-41:
Код
		{"Настройки", "preferences-desktop", "Settings","DesktopSettings","HardwareSettings","Setup","PackageManager","Desktop","Screensaver","Accessibility", NULL },
{"Графика", "applications-graphics", "Graphic","Photography","Presentation","Chart", NULL},
{"Игры", "applications-games", "Game","Amusement","RolePlaying","Simulation", NULL},
{"Интернет", "applications-internet", "Internet","WebBrowser","Email","News","InstantMessaging","Telephony","IRCClient","FileTransfer","P2P","Network","Dialup","HamRadio","RemoteAccess", NULL},
{"Инструменты", "applications-accessories", "Utility","Viewer","Profiling","Translation","GUIDesigner","Archiving","TerminalEmulator","Shell","File", NULL},
{"Мультимедиа", "applications-multimedia", "Video","Player","Music","Audio","Midi","Mixer","Sequencer","Tuner","TV","DiskBurning", NULL},
{"Офис", "applications-office", "Office","Document","WordProcessor","WebDevelopment","TextEditor","Dictionary","Calculat","Finance","Spreadsheet","ProjectManagement","Personal", "Calendar","ContactManagement", NULL},
{"Разработка", "applications-development", "Development","Building","Debugger","IDE", NULL},
{"Система", "applications-system", "System","Monitor","Security","Core", NULL },

2. Есть ли возможность сделать пункт "Настройки", потом разделитель <Separator/>, а потом остальные категории по алфавиту (так было бы привычнее)? Если это сложно, то не обязательно, т.к. является только украшением.

3. Хорошо бы добавить фильтрацию десктоп-файлов по еще одному параметру NoDisplay=true, если эта строчка есть, то файл пропускается, а если ее нет или NoDisplay=false, то файл обрабатывается.
 
4. Сейчас пункты категорий меню выглядят так:
Код
<Menu label="Настройки" icon="preferences-desktop">
но в JWM можно задавать еще и высоту строк параметром height=, напр., height="18".
Можно ли добавить обработку внешнего параметра, чтобы задавать высоту пунктов меню, напр., если написать jwmtst -m 18, то чтобы получалась такая запись строки категории:  
Код
<Menu label="Настройки" icon="preferences-desktop" height="18">
« Последнее редактирование: 23 Февраль 2016, 00:07:15 от RoDoN »
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re:Построитель меню JWM на C
« Ответ #95 : 23 Февраль 2016, 07:53:44 »
Разделил тему. может из родительской темы еще что-нибудь вырастет  ;)

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re:Построитель меню JWM
« Ответ #96 : 23 Февраль 2016, 10:01:44 »
4. Сейчас пункты категорий меню выглядят так:
Код
<Menu label="Настройки" icon="preferences-desktop">
но в JWM можно задавать еще и высоту строк параметром height=, напр., height="18".
Можно ли добавить обработку внешнего параметра, чтобы задавать высоту пунктов меню, напр., если написать jwmtst -m 18, то чтобы получалась такая запись строки категории:  
Код
<Menu label="Настройки" icon="preferences-desktop" height="18">
Это будет лишним, параметр height задаётся глобально в $HOME/.jwmrc
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Re:Построитель меню JWM на C
« Ответ #97 : 23 Февраль 2016, 10:18:28 »
Не согласен, этот глобальный параметр действует на основное меню и пункты категорий, а на пункты программ уже нет :(
На скрине, если глобальный height="32".
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re:Построитель меню JWM на C
« Ответ #98 : 23 Февраль 2016, 10:32:25 »
реализуется пожелания RoDoN легко
только (имхо) стоит ли чз параметры командной строки  передавать, может лучше config файл ?
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Построитель меню JWM на C
« Ответ #99 : 23 Февраль 2016, 11:24:57 »
Вставил таблицу разбора, как у Rodon.
Добавил туда еще одну колонку для параметра height.
В принципе, можно сделать и ключ командной строки, но так, мне кажется, даже удобнее - при желании можно для разных категорий разную высоту задать.
Фильтрацию по NoDisplay добавил.
В таблице разбора теперь может  присутствовать строка с именем категории из подчеркиваний, анализируется на самом деле только первый символ.  Такая категория не обрабатывается, вместо нее выводится сепаратор.
На https://github.com/andreyrogojin/menu/ выложил.
Компилировать надо или сами сделаете?  Если пакет DEVX есть, там делать нечего.

реализуется пожелания RoDoN легко
только (имхо) стоит ли чз параметры командной строки  передавать, может лучше config файл ?
Если уж конфиг файл, то с него надо грузить всю таблицу разбора.  Но это еще думать надо, как сделать.  Тут придется отслеживать возможные ошибки в нем.
« Последнее редактирование: 23 Февраль 2016, 11:31:30 от ander »

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re:Построитель меню JWM на C
« Ответ #100 : 23 Февраль 2016, 11:48:16 »
идея :) :
добавить параметр ком строки --config_file(обсуждаемо)
если есть этот параметр - с файла конфиг берется, нет - с ком строки, если нигде никаких параметров нет - все дефолтно .
ну и тогда уже дока нужна - иначе путаница.
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Re:Построитель меню JWM на C
« Ответ #101 : 23 Февраль 2016, 11:55:00 »
Скомпилил, теперь классно, но высоту лучше задавать из ком.строки или из конфиг-файла, идея k0l0p0k мне нравится.

Если уж конфиг файл, то с него надо грузить всю таблицу разбора.
Хорошая мысль, тогда можно и значки у категорий менять и типы программ в категориях добавлять/удалять.

Заметил еще одну вещь, что если попадется десктоп-файл с несколькими строчками Name=, то в меню попадает последняя, пока вроде-бы есть только один такой файл deadbeef.desktop, для которого в меню вываливается название Prev из последних строк:
Код
[Desktop Action Previous]
Name=Prev
Exec=deadbeef --prev
Причем наличие в начале "Name[ru]=DeaDBeeF - Аудио плеер" не влияет.
« Последнее редактирование: 23 Февраль 2016, 12:45:07 от RoDoN »
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Построитель меню JWM на C
« Ответ #102 : 23 Февраль 2016, 15:07:37 »
Обработку файлов с несколькими секциями, вроде deadbeef, поправил.
Теперь все секции кроме [Desktop Entry] игнорируются.

Насчет конфига подумаю, но это скорее всего не быстро, тут надо придумать удобный и простой для разбора формат и предусмотреть всяческие возможные ошибки.

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Re:Построитель меню JWM на C
« Ответ #103 : 23 Февраль 2016, 15:40:22 »
..
Насчет конфига подумаю, но это скорее всего не быстро, тут надо придумать удобный и простой для разбора формат и предусмотреть всяческие возможные ошибки.
1е слово - название параметра, 2е - значение (возможно в кавычках)
следующая строчка - следующий параметр.
разделитель - пробел наверное(или '=' ??)
можно и коменты обрабатывать(напр отсекать до конца строки)
ошибочные - игнорировать
« Последнее редактирование: 23 Февраль 2016, 15:42:09 от k0l0p0k »
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:Построитель меню JWM на C
« Ответ #104 : 23 Февраль 2016, 18:30:34 »
так оттуда надо целую таблицу загрузить, а в таком виде ее расписывать неудобно.
Вот так она выглядит в исходнике:
Цитата
{  // сначала имя категории, потом иконка, высота меню, потом ключевые слова категории
{"Настройки", "preferences-desktop", "18", "Settings","DesktopSettings","HardwareSettings","Setup","PackageManager","Desktop","Screensaver","Accessibility", NULL },
{"________", },
{"Графика", "applications-graphics", "18", "Graphic","Photography","Presentation","Chart", NULL},
{"Игры", "applications-games", "18", "Game","Amusement","RolePlaying","Simulation", NULL},
{"Интернет", "applications-internet", "18", "Internet","WebBrowser","Email","News","InstantMessaging","Telephony","IRCClient","FileTransfer","P2P","Network","Dialup","HamRadio","RemoteAccess", NULL},
{"Инструменты", "applications-accessories", "18", "Utility","Viewer","Profiling","Translation","GUIDesigner","Archiving","TerminalEmulator","Shell","File", NULL},
{"Мультимедиа", "applications-multimedia", "18", "Video","Player","Music","Audio","Midi","Mixer","Sequencer","Tuner","TV","DiskBurning", NULL},
{"Офис", "applications-office", "18", "Office","Document","WordProcessor","WebDevelopment","TextEditor","Dictionary","Calculat","Finance","Spreadsheet","ProjectManagement","Personal", "Calendar","ContactManagement", NULL},
{"Разработка", "applications-development", "18", "Development","Building","Debugger","IDE", NULL},
{"Система", "applications-system", "18", "System","Monitor","Security","Core", NULL },
Попробуйте-ка расписать это по параметру на строчку - получится длинное полотенце, в котором не запутаться невозможно.

А какой-то сложный разбор - это время, конфиг ведь будет читаться при каждом запуске.  Для динамического меню нужно что-то достаточно быстрое.
« Последнее редактирование: 23 Февраль 2016, 18:50:42 от ander »