LINUX.ORG.RU

Как отредактировать меню в awesome-wm с freedesktop?

 , , , ,


0

1

Здравствуйте! Подскажите, пожалуйста, как сделать сабж?
Порылся в гугле и понял, что freedesktop.menu.build каким-то хитрым образом находит все необходимые иконки и затем строит меню вместе с ними. Я, честно говоря, не очень хорошо знаю Lua и опыт работы с Awesome WM (а тем более кастомизации с отладкой (кстати, как тут нормально отлаживаться вообще?! Посмотреть значения каких-то переменных, вывести то же меню в виде таблицы/словаря, например…)) не очень большой.
Вот соответствующий кусок кода rc.lua:

-- {{{ Menu
-- Create a launcher widget and a main menu
myawesomemenu = {
    { "hotkeys", function() return false, hotkeys_popup.show_help end, menubar.utils.lookup_icon("preferences-desktop-keyboard-shortcuts") },
    { "manual", terminal .. " -e man awesome", menubar.utils.lookup_icon("system-help") },
    { "edit config", gui_editor .. " " .. awesome.conffile,  menubar.utils.lookup_icon("accessories-text-editor") },
    { "restart", awesome.restart, menubar.utils.lookup_icon("system-restart") },
    {"open Lua console", function() aluaconsole.toggle_visibility() end},
}
myexitmenu = {
    { "log out", function() awesome.quit() end, menubar.utils.lookup_icon("system-log-out") },
    { "suspend", "systemctl suspend", menubar.utils.lookup_icon("system-suspend") },
    { "hibernate", "systemctl hibernate", menubar.utils.lookup_icon("system-suspend-hibernate") },
    { "reboot", "systemctl reboot", menubar.utils.lookup_icon("system-reboot") },
    { "shutdown", "poweroff", menubar.utils.lookup_icon("system-shutdown") }
}
-- WHERE ARE ALL THE ITEMS MAN?!
mymainmenu = freedesktop.menu.build({
    icon_size = 32,
    before = {
        { "Terminal", terminal, menubar.utils.lookup_icon("utilities-terminal") },
        { "Browser", browser, menubar.utils.lookup_icon("internet-web-browser") },
        { "Files", filemanager, menubar.utils.lookup_icon("system-file-manager") },
        -- other triads can be put here
    },
    after = {
        { "Awesome", myawesomemenu, "/usr/share/awesome/icons/awesome32.png" },
        { "Exit", myexitmenu, menubar.utils.lookup_icon("system-shutdown") },
        -- other triads can be put here
    }
})

mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
                                     menu = mymainmenu })

Ответ на: комментарий от Eid010n

весь смысл freedesktop-ного меню, что оно собирается из файловой системы

ну и /usr/share/applications не рекомендуется редактироваться вообще, туда при установке программ они сами сохраняют свои пункты для freedesktop меню (для редактирования пользователем предназначен ~/.local/share/applications)

есть пару программ класса «freedesktop menu editor» (я к сожалению не помню названия самих программ), которые как раз редактируют ~/.local/share/applications а так же позволяют «отредактировать» содержимое /usr/share/applications создав override в каталоге юзера, которому будет отдаваться больший приоритет

actionless ★★★★★
()

и, кстати, в первом сообщении я вижу, что у тебя старая (синхронная) версия менюбилдера, которая по сути блокирует интерфейс пока загружает пункты меню

генерация меню должна выполняться асинхронно: https://github.com/actionless/awesome_config/blob/master/config/menu.lua#L205-L211

actionless ★★★★★
()
Ответ на: комментарий от const92

ок, спасибо!) тоже вариант в принципе на первое время) совсем забыл, что у AWM тоже ж ведь свои notification’ы есть)

Eid010n
() автор топика
Ответ на: комментарий от Eid010n

проще уж в лог писать

есть только проблемка, что по-умолчанию awesome сохраняет на диск только stderr (в ~/.xsession-errors)

чтобы решить её, а так же возможность крэша осома во время написания каких-то новых фич, я использую такой враппер (положить в /usr/bin):

https://github.com/actionless/awesome_config/blob/master/packaging/awesome_argb

и пункт для логин менеджера (в /usr/share/xsesssions):

https://github.com/actionless/awesome_config/blob/master/packaging/awesome_argb.desktop

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

и в самом awesome menu можно потом использовать «фичи» из этого скрипта:

    { "quit (hard reload)", function()
        awesome.quit()
      end, get_icon('actions', 'application-exit')
    },
    { "quit2 (toggle argb)", function()
        awesome.quit(2)
      end, get_icon('actions', 'format-text-italic')
    },
    { "quit3 (openbox)", function()
        awesome.quit(3)
      end, get_icon('apps', 'openbox')
    },
    { "quit9 (to DM)", function()
        awesome.quit(9)
      end, get_icon('actions', 'window-close')
    },
actionless ★★★★★
()
Последнее исправление: actionless (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.