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

Разработка скриптов на lua. Создание виджетов, диалогов и т.д.
Ответить
Аватара пользователя
olgmen
Сообщения: 155
Зарегистрирован: 30 ноя 2012, 11:00
Темы: 32
Откуда: Санкт-Петербург
Статус: Не в сети

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

Сообщение olgmen » 17 дек 2013, 11:28

Оказывается это не так уж и сложно. Для создания виджетов, и вообще для написания программ на языке lua, по моему мнению, необходимо знать самые основы программирования. Я не буду описывать что такое скрипт, переменная и прочие элементарные вещи, для этого есть wiki, googl и прочие поисковики. Буду описывать так, как сам это понимаю, так что не судите строго, многого я сам не знаю.
Итак для начала создадим виджет выводящий на рабочий стол черный квадрат, который будет выводиться при нажатии клавиш Alt+Menu, или любой другой комбинации клавиш на ваше усмотрение. Для этого необходимо в любимом редакторе, это уж вам выбирать, создать скрипт с названием, например black_square.lua и помещаем его в папку ~/.config/awesome/ (почему черный квадрат, потому что мы его и выведем на рабочий стол)

в начале скрипта необходимо указать используемые библиотеки, это стандартные библиотеки awesome, в нашем случае нужна только одна библиотека в которой содержаться программы для создания виджетов. Итак пишем (полный текст виджета можно взять на http://dumpz.org/760051/ или в спойлере под статьей)

local wibox = require("wibox")

Все библиотеки должны быть записаны только как локальные

всё будем выводить на первый экран, для этого напишем две строки

local oapi = { screen = screen }
local scrn = oapi.screen[1].geometry


создаем таблицу для хранения данных виджета, обзываем её как угодно, например

proba = {}

Теперь пишем параметры виджета, везде используя название таблицы

proba.width = 250 -- ширина виджета
proba.height = 250 -- высота виджета

Немного о том, как назначаем цвет. Цвет пишется в формате RGBA, в данном примере будем выводить полупрозрачный черный квадрат

proba.bg_color = "#00000088" -- цвет фона черный полу прозрачный

и последние необходимые данные, координаты точки на экране, в которую будет выведен левый верхний угол виджета

proba.x = 200 -- Координаты
proba.y = 50 -- левого верхнего угла

С данными закончено, создаем wibox с нашими данными

local proba_wbox = wibox({ bg = proba.bg_color,
width = proba.width,
height = proba.height })


и определяем как наш виджет будет выводиться на рабочий стол

proba_wbox.ontop = true -- true - поверх всех окон / false - на рабочий стол
proba_wbox.visible = false -- true - при запуске компа виден / false - не виден

подтверждаем координаты вывода

proba_wbox:geometry({x = proba.x, y = proba.y})

следующая строка Создает виджет

local proba_widget = wibox.widget.base.make_widget()

Функция, возвращающая размеры виджета для дальнейшего использования

proba_widget.fit = function( proba_widget, width, height )
return width, height
end


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

proba_widget.draw = function(proba_widget, proba_wbox, cr, width, height)

-- место для выводимых программ, но сейчас просто закрываем функцию

end

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

local proba_layout = wibox.layout.fixed.horizontal()
proba_layout:add(proba_widget)
proba_wbox:set_widget(proba_layout)
proba.wibox = proba_wbox
return proba


Виджет готов, сохраняем его. Никаких прав на исполнение и прописка виджета не нужна.

В rc.lua добавляем следующие строки.
в начале скрипта добавляем строку, которая дает ссылку на наш виджет

local black_square = require("black_square")

для запуска виджета с помощью клавиш, у меня виджет задействован на клавиши Alt+Menu, добавляем строку между разделами

globalkeys = awful.util.table.join(

и разделом

clientkeys = awful.util.table.join(

строка имеет такой вид

awful.key({"Mod1"}, "#135", function() proba.wibox.visible = not proba.wibox.visible end)

не забудьте поставить запятую в конце вышестоящей строки.

вот и всё. При нажатии клавиш появится черный квадрат

Изображение

повторное нажатие убирает наш первый виджет

[spoiler="Исходный код виджета"]--[[ black_square.lua ]]-- --[[ Создадим виджет выводящий на рабочий стол черный квадрат. Для начала создаём скрипт с названием black_square.lua и помещаем его в папку awesome в скрипте необходимо указать используемые библиотеки ]] --local awful = require("awful") local wibox = require("wibox") -- всё будем выводить на первый экран local oapi = { screen = screen } local scrn = oapi.screen[1].geometry -- создаем таблицу для хранения данных виджета, обзываем её как угодно, например proba = {} --Теперь пишем параметры виджета, везде используя название таблицы proba.width = 250 -- ширина виджета proba.height = 250 -- высота виджета proba.bg_color = "#00000088" -- цвет фона черный полу прозрачный proba.x = 200 -- Координаты proba.y = 50 -- левого верхнего угла -- Создаем wibox с нашими данными local proba_wbox = wibox({ bg = proba.bg_color, width = proba.width, height = proba.height }) -- теперь определяем как будет выводиться proba_wbox.ontop = true -- true - поверх всех окон / false - на рабочий стол proba_wbox.visible = false -- true - при запуске виден / false - не виден proba_wbox:geometry({x = proba.x, y = proba.y}) -- Координаты -- Создаем виджет local proba_widget = wibox.widget.base.make_widget() -- Функция, определяющая размеры виджета proba_widget.fit = function( proba_widget, width, height ) return width, height end ------------------------------------------------------------------------------- -- Функция содержащая всё то, что мы хотим вывести в виджете, ------------------------------------------------------------------------------- proba_widget.draw = function(proba_widget, proba_wbox, cr, width, height) end -- Размещаем виджет local proba_layout = wibox.layout.fixed.horizontal() proba_layout:add(proba_widget) proba_wbox:set_widget(proba_layout) proba.wibox = proba_wbox return proba[/spoiler]
Последний раз редактировалось lumberjack 17 дек 2013, 15:08, всего редактировалось 2 раза.
Причина: Добавил спойлер с кодом на случай недоступности dumpz.org
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость