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

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

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

Оффлайн k0l0p0k

  • Ветеран
  • *****
  • Сообщений: 1611
  • Репутация: +27/-1
Построитель меню JWM
« Ответ #75 : 20 Февраль 2016, 20:41:02 »
2. не добавит

Цитата
devx надо установить, чтобы скомпилировать tst?
да,
хотя нет - вру - можно один gcc установить.
« Последнее редактирование: 20 Февраль 2016, 20:43:57 от k0l0p0k »
1.пень G2020,8Gb,Radeon RX460 (Debian+openBox+LXPanel)
2.нетбук  Samsung N145 (Debian+openBox+LXPanel, ddr01)

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Построитель меню JWM
« Ответ #76 : 20 Февраль 2016, 23:23:14 »
Напишете какую вам надо, вставить в исходник минутное дело.
Вообще-то мне надо маленькую и шуструю утилиту (без зависимостей на гномолибы), которая будет создавать динамическое меню. А по вашему варианту многое мне не нравится, а ДядяШурик слишком упертый. ;)
Ну, попробуйте описать,что вам надо, только без отсылок типа "сделать, как в jwm-xdgmenu" - потому что это потребует его досконального изучения, а мне лень. :)
Опишите в терминах: на входе имеем...  на выходе должно быть...

1. Хотя бы надо файлы меню складывать в ~/.jwm/menu/ и разбить их на категории как сейчас используется.
2. Это добавит проверку в заданных каталогах или нет?
char *appdir="/usr/share/applications/","/usr/local/share/applications/","/home/live/.local/share/applications/";
Так в последнем варианте по всем этим трем каталогам и ищет, и складывает в .jwm/menu
И зависимостей кроме libc никаких нет.
А насчет категорий - я ж написал, табличку составьте, что куда надо, а в исходник я ее быстро вставлю.

devx надо установить, чтобы скомпилировать tst?

p.s. ander, можешь jwm-xdgmenu2 скомпилировать для пра64?
devx, разумеется, надо, компилятор же в нем находится.

A jwm-xdgmenu2 компилировать не пробовал.  Если компилируется только под 32 разряда, а под 64 не хочет - значит досконально разбираться надо, а из меня программист так себе.
« Последнее редактирование: 20 Февраль 2016, 23:27:48 от ander »

Оффлайн paulus

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 1732
  • Репутация: +24/-0
Построитель меню JWM
« Ответ #77 : 21 Февраль 2016, 04:42:47 »
Помучал tst, не знал что вы его обновили. Если сделать так, то будет почти как сейчас в jwm (проверьте), только есть нюансы...
Код
		{"System", "System","Monitor","Security","Core", NULL },
{"Settings", "Settings","DesktopSettings","HardwareSettings","Setup","PackageManager","Desktop","Screensaver","Accessibility", NULL },
{"Utility", "Utility","Viewer","Profiling","Translation","GUIDesigner","Archiving","TerminalEmulator","Shell","File", NULL},
{"Development", "Development","Building","Debugger","IDE", NULL},
{"Graphic", "Graphic","Photography","Presentation","Chart", NULL},
{"Office", "Office","Document","WordProcessor","WebDevelopment","TextEditor","Dictionary","Calculat","Finance","Spreadsheet","ProjectManagement","Personal","Calendar","ContactManagement", NULL},
{"Internet", "Internet","WebBrowser","Email","News","InstantMessaging","Telephony","IRCClient","FileTransfer","P2P","Network","Dialup","HamRadio","RemoteAccess", NULL},
{"Multimedia", "Video","Player","Music","Audio","Midi","Mixer","Sequencer","Tuner","TV","DiskBurning", NULL},
{"Game", "Game","Amusement","RolePlaying","Simulation", NULL},

В Settings/Настройки два пункта: <Program label="Настройки дисплея" icon="screen_calibration">xrdr.sh</Program>
В System/Система два пункта: <Program label="Обновление дистрибутива" icon="gtk-refresh">dist-up -f</Program>  
Файл System редактор geany крякозяблами открывает, mcedit нормально.
На пра64 пока не проверял...

Ну, попробуйте описать,что вам надо, в терминах: на входе имеем...  на выходе должно быть...
Не уверен, как правильно описать... В меню jwm должно быть:
<Dynamic label="Приложения" icon="/usr/share/xpupsay/cow_small.png">exec:jwm_tstmenu</Dynamic>
jwm_tstmenu должно выдавать, то что сейчас делает tst, но без сохранения кучи файлов-категорий подменю. jwm сам должен подхватывать вывод tst и создавать меню. Чуть выше уже писали, что так сделать даже проще...

Можно сделать два варианта tst и tstd (dynamic), пусть пользователи выбирают, что больше нравится. Обычно в меню редко заглядывают (быстрые клавиши и куча доп. меню и панелей), так что динамическое вполне устраивает. Меньше файлов, костылей и пакет меньше на треть. С tst может еще меньше будет. Я бы tstd-menu себе и в арче64 использовал. Не морочил бы вам этим голову, если бы jwm-xdgmenu2 был и для 64bit, хочется два одинаковых пакета для пра/пра64 (сейчас разное).
« Последнее редактирование: 21 Февраль 2016, 04:48:57 от paulus »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #78 : 21 Февраль 2016, 09:52:38 »
ДядяШурик слишком упертый. ;)
Не настолько как вы думаете. Как бы вы повели себя отстаивая своё ИМХО, когда вы правы?

Если в tst отказаться от кучи создаваемых файлов, а выводить сразу на stdout, получится очень неплохо.
Моноблок 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

Оффлайн k0l0p0k

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

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Построитель меню JWM
« Ответ #80 : 21 Февраль 2016, 21:19:52 »
В Settings/Настройки два пункта: <Program label="Настройки дисплея" icon="screen_calibration">xrdr.sh</Program>
В System/Система два пункта: <Program label="Обновление дистрибутива" icon="gtk-refresh">dist-up -f</Program>  

Настройки дисплея два раза, потому что два desktop файла, один в /usr/share/...  а второй в /usr/local/share/...
Обновление два раза что-то не увидел, возможно тоже два файла, но только у вас, а у меня нет.

Переписал, сделал,чтобы выплевывало на выход что-то такое:
Код
<JWM>
<Menu label="Система" icon="applications-system">
<Program label="Cfdisk - Менеджер разделов диска" icon="drive48.png">cfdisk+.sh</Program>
<Program label="Frugal установка PRA" icon="install_options">sudo install-g4d</Program>
<Program label="GParted" icon="gparted">sudo gparted.sh</Program>
<Program label="Hot Keys - горячие клавиши" icon="keyboard_shortcut">hotkeys</Program>
......
</Menu>
<Menu label="Игры" icon="applications-games">
        <Program label="AssaultCube" icon="assaultcube">assaultcube</Program>
.............
</Menu>
</JWM>

Надеюсь, это то, что нужно.  Сам-то с jwm дела не имел, поэтому форматов толком не знаю.

В прикрепленном архиве исходник и скомпилированный под 32 разряда исполняемый файл.
Таблицу распределения по категориям немного изменил, теперь первая колонка - имя категории, вторая - иконка, дальше как обычно ключевые слова.

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Построитель меню JWM
« Ответ #81 : 22 Февраль 2016, 00:03:57 »
Здорово, результат почти такой же, как и с jwm-xdgmenu2, но с размером почти в 7 раз меньше и возможностью допилить исходник!!! Вот за это спасибо! +
Есть еще некоторые шероховатости со значками, некоторые пункты лишние, напр, у меня дефаултменеджер вылез, вообщем надо еще потестить и будет то что надо.
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #82 : 22 Февраль 2016, 08:34:45 »
 Плюсую. Вопрос к ander, у вас Github есть? Если нет, может выложить на мой?
<противный гнусавый голос в сторону> Пусть теперь sfs скажет, что у нас сишников нет  :D
Моноблок 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
« Ответ #83 : 22 Февраль 2016, 08:43:27 »
Github у ander есть
Есть измерения - насколько си быстрее работает sh (sh - в ПРА64 jwm2.2)? Т.е. правильно ли направление...
Если правильное - не останавливайтесь - делайте (если есть желание и Вас не затруднит)
1. построитель меню для openbox icewm
2. DE независимое gtk22 меню с поиском
« Последнее редактирование: 22 Февраль 2016, 09:05:26 от sfs »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #84 : 22 Февраль 2016, 09:01:45 »
Github у ander есть
Замечательно
правильно ли направление...
Любое направление, которое приводит не в тупик и не в зависимость, правильное.
не останавливайтесь - делайте
Вы что, нам уже начальник?

Моноблок 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

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #85 : 22 Февраль 2016, 10:09:12 »
 Погонял jwmtst. "На ощупь" меню открывается быстрее чем в icewm. Разобраться бы ещё с иконками, но это скорее нестандартные *.desktop.
Моноблок 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
Построитель меню JWM
« Ответ #86 : 22 Февраль 2016, 13:41:32 »
ander, а можно в jwmtst сделать так, чтобы в icon="имя_значка" не было расширений, а только одно имя без пути, напр. с icon="galculator.xpm" нет значка, а если убрать расширение, то значек в меню есть.
Еще заметил, что label="имя_программы" обрезается, если превышает 35 или 36 знаков, напр., получается label="Htop - управление системными процессÐ" вместо label="Htop - управление системными процессами", а также label="Графический редактор (подключить .p" вместо label="Графический редактор (подключить .pfs)" и т.д., думаю надо бы допустимую длину имени увеличить хотя бы до 48 или 50 символов.
Задвоились пункты:
<Program label="Настройки дисплея" icon="screen_calibration">xrdr.sh</Program>
<Program label="Графический редактор (подключить .p" icon="application-pfs">defaultimageeditor</Program>
есть еще задвоенные названия пунктов меню, но там разные команды на исполнение, т.е. это уже надо десктоп-файлы смотреть и править.

Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Построитель меню JWM
« Ответ #87 : 22 Февраль 2016, 13:53:23 »
а только одно имя без пути
Код
//взято из libbb/get_last_path_component.c, подпилено
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
char *cp = strrchr(argv[1], '/');
if (cp) printf("%s\n",cp+1);
else printf("%s\n",argv[1]);
}
Это из исходников busybox.
Моноблок 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

Оффлайн drill

  • Пользователь
  • **
  • Сообщений: 31
  • Репутация: +4/-0
Построитель меню JWM
« Ответ #88 : 22 Февраль 2016, 14:35:08 »
обрезается, если превышает 35 или 36 знаков, напр., получается
label="Htop - управление системными процессÐ"
Тут в байтах: 64 байта (каждый кириллический символ в UTF-8 по 2 байта).

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6282
  • Репутация: +141/-0
Построитель меню JWM
« Ответ #89 : 22 Февраль 2016, 14:58:58 »
Задвоение в меню из-за того, что и в /usr/share/applications, и в /usr/local/share/applications есть файлы с одинаковыми именами, напр.:
defaultimageeditor.desktop
dist-up.desktop
lxrandr.desktop
Pup-Kview.desktop
причем некоторые одинаковые, а некоторые чуть-чуть отличаются. Зачем так сделано? Вопрос наверно к sfs.

Есть еще у меня в меню два одинаковых по названию пункта:
<Program label="Эмулятор терминала" icon="utilities-terminal">exo-open --launch TerminalEmulator</Program>
<Program label="Эмулятор терминала" icon="console48">urxvt.sh</Program>
но их у меня создают  /usr/share/applications/exo-terminal-emulator.desktop (т.к. подключен модуль Thunar) и /usr/local/share/applications/Urxvt-terminal-emulator.desktop, после их просмотра вижу необходимость добавления в jwmtst фильтра, который будет дополнительно сортировать десктоп-файлы по необязательному параметру OnlyShowIn=, конечно при его наличии.
« Последнее редактирование: 22 Февраль 2016, 15:01:02 от RoDoN »
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE