Программно изменить тему awesomewm

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

У меня нет проблем с настройкой каждой отдельной темы, но я не могу найти способ установить тему после того, как awesomewm начал работать, не убивая текущий экземпляр, а затем создавая новый.

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


person samuelmr    schedule 13.04.2017    source источник


Ответы (2)


Я думаю, что один из возможных способов - воссоздать все ваши виджеты после изменения темы. Не уверен для всего кода, но вот быстрый пример того, как перестроить панель с помощью горячей клавиши для awesome v4.0.

Сначала некоторые модификации для функций построения экрана

local function build_panel(s)
    -- destroy old panel
    if s.mywibox then s.mywibox:remove() end

    -- create a promptbox for given screen
    s.mypromptbox = awful.widget.prompt()

    -- create a layoutbox for given screen
    s.mylayoutbox = awful.widget.layoutbox(s)
    s.mylayoutbox:buttons(awful.util.table.join(
                           awful.button({ }, 1, function () awful.layout.inc( 1) end),
                           awful.button({ }, 3, function () awful.layout.inc(-1) end),
                           awful.button({ }, 4, function () awful.layout.inc( 1) end),
                           awful.button({ }, 5, function () awful.layout.inc(-1) end))
    )
    -- create a taglist widget
    s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons)

    -- create a tasklist widget
    s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)

    -- create panel wibox
    s.mywibox = awful.wibar({ position = "top", screen = s })

    -- add widgets to the panel wibox
    s.mywibox:setup {
        layout = wibox.layout.align.horizontal,
        { layout = wibox.layout.fixed.horizontal, mylauncher, s.mytaglist, s.mypromptbox },
        s.mytasklist,
        { layout = wibox.layout.fixed.horizontal, mykeyboardlayout, wibox.widget.systray(), mytextclock, s.mylayoutbox },
    }
end

awful.screen.connect_for_each_screen(function(s)
    -- wallpaper
    set_wallpaper(s)

    -- tags
    awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])

    -- panel setup
    build_panel(s)
end)

И добавить действие в globalkeys

awful.key(
    { modkey }, "z",
    function()
        -- change theme settings
        beautiful.bg_normal = "#ff2020"
        beautiful.fg_normal = "#2020ff"
        -- rebuild panel widgets
        build_panel(mouse.screen)
    end,
    {description="theme colors change", group="awesome"}
),
person Worron    schedule 14.04.2017

Я хотел того же и добился этого, написав небольшой скрипт, который отображается на ярлык. Если вы хотите сделать это самостоятельно, выполните следующие действия:

  1. Создайте папку, содержащую ваши темы.
  2. Напишите сценарий (или используйте мой), который копирует файлы в вашу ~/.config/awesome папку.
  3. Добавьте ярлык или что-то в этом роде для выполнения скрипта. Сценарий должен скопировать файлы из папки вашей темы в папку конфигурации awesome (~/.config/awesome).
  4. После этого вы можете видеть / использовать свою тему после выполнения скрипта и перезапуска awesomewm (ярлык по умолчанию: modkey + shift + r
    Ваш rc.lua файл должен читать только файлы вашего каталога awesome-config. Вы просто перезаписываете их, копируя файлы вашего тема-папка. Я надеюсь, что объяснение будет хорошим, если не просто прокомментировать этот ответ.
person TornaxO7    schedule 09.08.2020