Widgets in awesome/ru

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

Создание виджета
Для awesome 3.4

mysystray = widget({ type = "systray" })

myicon = widget({ type = "imagebox" }) myicon.image = image(awful.util.getdir("config") .. "/myicon.png")

mytextbox = widget({ type = "textbox" })

Для awesome 3.5

mysystray = wibox.widget.systray

myicon = wibox.widget.imagebox myicon:set_image(awful.util.getdir("config") .. "/myicon.png")

mytextbox = wibox.widget.textbox

Типы виджетов
В настоящее время существуют следующие типы виджетов:

systray
Отображает системный трей, в котором программы могут размещать свои значки.

imagebox
Отображает картинку в формате, поддерживаемых в Imlib2 (png, jpeg). Используйте вместе с textbox, чтобы создавать ярлыки, иконки и разделители.

textbox
Виджет для отображения текста, это наиболее часто используемый виджет. После создания виджета textbox, как указано в примере выше, переменная mytextbox, теперь содержит ссылку на виджет, с помощью которого вы можете управлять и изменять его значения. Вы можете установить или изменить текст виджета, с помощью модификации его поля .text в Awesome 3.4 или используйте метод set_text в 3.5

Awesome 3.4: mytextbox.text = "Hello, world!"

Awesome 3.5: mytextbox:set_text("Hello, world!")

Данный код изменит отображаемый виджетом текст на Hello, world!. Некоторые могут вспомнить утилиту awesome-client, и спросить, а можно ли изменить значение текста с его помощью. Да, с его помощью можно изменить значение поля '.text или используйте метод set_text'' в зависимости от вашей версии Awesome, и значение будет обновлено:

Awesome 3.4: $ echo "mytextbox.text = \"Foo Bar!\"" | awesome-client Awesome 3.5: $ echo "mytextbox:set_text(\"Foo Bar!\")" | awesome-client

Однако в awesome вам нет необходимости использовать сторонние (внешние) скрипты, для передачи данных вашим виджетам. Awesome не только предоставляет описание системы мониторинга в Lua, но и предоставляет awesome timer API который позволяет настроить таймеры, периодически выполняющие или обновляющие ваши виджеты. Рассмотрим работу таймера на примере: Awesome 3.4: mytimer = timer({ timeout = 30 }) mytimer:add_signal("timeout", function mytextbox.text = "Hello awesome world!" end) mytimer:start Awesome 3.5: mytimer = timer({ timeout = 30 }) mytimer:connect_signal("timeout", function mytextbox:set_text("Hello awesome world!") end) mytimer:start

Очень часто можно встретить вопрос об изменении цвета текста в виджете textbox. По умолчанию в виджете textbox, используются значения текущего шрифта, однако вы можете изменять свойства шрифта используя стандарт Pango markup. В Awesome 3.5 разметка будет проигнорированна методом set_text, для использования разметки, используйте метод set_markup. Awesome 3.4: mytextbox.text = ' Sacrebleu, I have seen a ghost! ' Awesome 3.5: mytextbox.set_markup( ' Sacrebleu, I have seen a ghost! ') Для изменения фона, можно использовать фоновый виджет: Awesome 3.5: local datewidget_text = wibox.widget.textbox local datewidget = wibox.widget.background datewidget:set_widget(datewidget_text) datewidget:set_bg("#df7401")

Функциональность виджетов awful
Awesome распространяется с несколькими облегчающими разработку виджетов библиотеками, такими как awful, которая использовалась вышеописанными типами виджетов для создания необходимой функциональности. Например awful.widget.taglist - создает виджет тегов, а функция awful.widget.tasklist - создает виджет панели задач. Другими вариантами использования функциональности awful являются виджеты button, launcher, prompt и layoutbox.

Graph
Модуль awful.widget.graph создает и отображает графики с изменяющимися во времени данными. Пример настройки graph:

 Старые версии Awesome без библиотеки awful mygraph = widget({ type = "graph", align = "right" }) mygraph.width = 70 mygraph.height = 0.90 mygraph.grow = "left" mygraph.bg = beautiful.mygraph_bg mygraph.border_color = beautiful.mygraph_border_color

mygraph:plot_properties_set("total", {    ["fg"] = "#336699cc",   ["fg_center"] = beautiful.mygraph_total_center,   ["fg_end"] = beautiful.mygraph_total_end,   ["vertical_gradient"] = true,   ["scale"] = false,   ["max_value"] = "100.0",   ["style"] = "bottom" })

Awesome с библиотекой awful mygraph = awful.widget.graph mygraph:set_width(50) mygraph:set_background_color('#494B4F') mygraph:set_color('#FF5656') mygraph:set_gradient_colors({ '#FF5656', '#88A175', '#AECF96' })

Переменная mygraph теперь содержит виджет объекта graph, сохраненную в его поле widget. Вы можете добавить данные в ваш graph, используя функцию add_value:

mygraph:add_value(0.5)

Progressbar
Модуль awful.widget.progressbar создает и отображает виджет индикатора выполнения.

Пример использования индикатора:

 Awesome без awful 

myprogressbar = widget({ type = "progressbar", align = "right" }) myprogressbar.width = 28 myprogressbar.height = 0.90 myprogressbar.gap = 0 myprogressbar.border_padding = 0 myprogressbar.border_width = 1 myprogressbar.ticks_count = 0 myprogressbar.vertical = true

myprogressbar:bar_properties_set("root",  {     ["bg"] = beautiful.myprogressbar_root_bg,    ["fg"] = beautiful.myprogressbar_root_fg,    ["fg_center"] = beautiful.myprogressbar_root_fg_center,    ["fg_end"] = beautiful.myprogressbar_root_fg_end,    ["fg_off"] = beautiful.myprogressbar_root_fg_off,    ["border_color"] = beautiful.myprogressbar_root_border_color,    ["min_value"] = "50.0",    ["max_value"] = "100.0",    ["reverse"] = false  })

 Awesome с библиотекой awful 

myprogressbar = awful.widget.progressbar myprogressbar:set_width(8) myprogressbar:set_height(10) myprogressbar:set_vertical(true) myprogressbar:set_background_color('#494B4F') myprogressbar:set_color('#AECF96') myprogressbar:set_gradient_colors({ '#AECF96', '#88A175', '#FF5656' })

Переменная myprogressbar теперь содержит объект виджета progressbar, сохраненную в его поле .widget. Вы можете добавить данный в индикатора используя функцию set_value:

myprogressbar:set_value(0.5)

Помните примеры textbox, awesome-client и таймеры. Некоторые возможности используются и здесь, такие как add_value (в graph) и set_value (в progressbar). Используя эти функции вы можете динамически посылать значения в диапазоне 0.1 - 1. Вы можете найти остальные доступные функции и свойства progressbar/graph в API и документации.

appicon
Значок, который можно поместить на панель и использовать для запуска приложения.

Виджет кнопок(buttons)
Вы можете привязать кнопку к уже существующему виджету (в данном случае textbox). Давайте взглянем на пример:

mytextbox:buttons(awful.util.table.join( awful.button({ }, 1, function awful.util.spawn("echo Нажата левая кнопка мыши.") end) ))

Следующий пример показывает, как добавить кнопку к виджетам progressbar и graph, привязав ее к существующему виджету, сохраненному в поле .widget: mygraph.widget:buttons(awful.util.table.join( awful.button({ }, 1, function awful.util.spawn("echo Снова нажата левая кнопка мыши.") end) ))

Управление виджетами
В предыдущих разделах, мы рассмотрели все об инициализации виджета, но помните, виджет должен быть добавлен в секцию wibox, иначе он не будет отображен. В файле rc.lua wibox создается в цикле для каждого физического экрана (screen). Вы можете управлять где именно ваш виджет будет размещен, на также на каком экране, в какой части секции wibox. Один и тот же виджет может быть много раз добавлен в различные wibox и экраны (screens), для этого вам нужно соответвенно изменить тело цикла.

Вы можете также контролировать на скольких экранах будут размещены виджеты (по уполчанию они располагаются на всех экранах, на которых отображается wibox). Ниже описан пример, позволяющий отобразить systray только на одном экране:

s == 1 and mysystray or nil,

Теперь, чтобы виджет системного трея (systray) помещался на 2-й экран вместо 1-го, измените в rc.lua в строке, относящейся к трею, с s == 1 на s == 2, то есть строка примет вид:

s == 2 and mysystray or nil }

В приведенном выше примере системный лоток (systray) появиться только на 2м экране. Подобный код вы можете также использовать и для других виджетов:

s == 2 and mytextbox or nil,

Как и в приведенном выше примере для кнопки, при добавлении виджетов progressbar и graph в вашу секцию wibox, необходимо ссылаться на реально созданный объект: mytextclock,         -- awesome clock widget, textbox mygraph.widget,      -- users customized graph widget myprogressbar.widget, -- users customized prbar widget

Схематика(layout) виджетов
Использование layout позволяет контролировать размещение виджетов, с помощью Lua, более гибко, чем в "старых" виджетах c помощью свойства .align. Вы можете прочитать introduction to widget layouts и Widget Layouts чтобы узнать больше.