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

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

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

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

1 ответ

Я думаю, что один из возможных способов - это воссоздать все ваши виджеты после смены темы. Не уверен для всего кода, но вот быстрый пример, как восстановить панель с помощью горячей клавиши для 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"}
),

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

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