awesome делимся виджетами

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

awesome делимся виджетами

Сообщение olgmen » 17 дек 2013, 13:59

Предлагаю здесь выкладывать свои и найденные в сети виджеты. Для начала выкладываю виджет выводящий на экран подсказку по горячим клавишам для awesome. Виджет не мой. Забрать виджет можно на http://dumpz.org/760155/

Изображение

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

hotkeys = require("hotkeys")

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

globalkeys = awful.util.table.join(

и разделом

clientkeys = awful.util.table.join(

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

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

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

[spoiler="Исходный код виджета"]------------------------------------------------------------------------------- -- -- Виджет отображения горячих клавиш -- -- (c) maisvendoo, 12.06.2013 -- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- Необходимые библиотеки ------------------------------------------------------------------------------- local awful = require("awful") local wibox = require("wibox") local oapi = { screen = screen } ------------------------------------------------------------------------------- -- Задаем параметры виджета ------------------------------------------------------------------------------- local scrn = oapi.screen[1].geometry hotkeys = {} hotkeys.width = 500 hotkeys.height = scrn.height - 27 ------------------------------------------------------------------------------- -- ------------------------------------------------------------------------------- hotkeys_wbox = wibox({bg = "#00000020", width = hotkeys.width, height = hotkeys.height}) hotkeys_wbox.visible = false hotkeys_wbox.ontop = true hotkeys_wbox:geometry({ x = 0, y = 27}) ------------------------------------------------------------------------------- -- ------------------------------------------------------------------------------- local title = wibox.widget.textbox() --title:set_text("Основные клавиатурные комбинации") title:set_align("center") title:set_valign("top") --title:set_font("Arial") local title_str = [[<span font_desc="Arial 16" color="#99ac3a" underline="none"></span> Основные клавиатурные комбинации <span font_desc="Arial 16" color="#99ac3a" underline="none"></span>]] title:set_markup('<span font_desc="Arial 16" color="#99ac3a" underline="single">'..title_str..'</span>') local main = wibox.widget.textbox() --title:set_text("Основные клавиатурные комбинации") main:set_align("left") main:set_valign("top") local main_text = [[ <span color="yellow">Mеню</span> - вызвать/убрать это окно <span color="white" font_desc="Arial 11 bold">1. Управление системой</span> <span color="yellow">Win + Shift + End</span> - выключить компьютер <span color="yellow">Win + Shift + Home</span> - перезагрузить компьютер <span color="yellow">Win + Shift + Q</span> - выйти из Awesome <span color="white" font_desc="Arial 12 bold">2. Общие команды оболочки</span> <span color="yellow">Win + E</span> - редактировать конфигурацию Awesome <span color="yellow">Win + Ctrl + R</span> - перезапуск Awesome <span color="yellow">Win + R</span> - выполнить команду <span color="yellow">Win + I</span> - запустить интернет-браузер <span color="yellow">Win + W</span> - отобразить главное меню <span color="yellow">Win + D</span> - запуск Double Commander <span color="yellow">Print Screen</span> - сделать снимок экрана <span color="yellow">Win + Up</span> - увеличить громкость <span color="yellow">Win + Down</span> - уменьшить громкость <span color="yellow">Win + J</span> - фокус на следующее окно в тэге <span color="yellow">Win + K</span> - фокус на предыдущее окно в тэге <span color="yellow">Win + Shift + J</span> - поменять местами текущее окно со следующим окном <span color="yellow">Win + Shift + K</span> - поменять местами текущее окно с предыдущим окном <span color="yellow">Win + Tab</span> - фокус на то окно, где он был ранее <span color="white" font_desc="Arial 12 bold">3. Управление окнами (клиентами)</span> <span color="yellow">Win + M</span> - максимизировать/вернуть размер окну <span color="yellow">Win + N</span> - свернуть окно <span color="yellow">Win + F</span> - окно на весь экран <span color="yellow">Win + T</span> - поверх дургих окон <span color="yellow">Ctrl + ~</span> - сделать данное окно прозрачным <span color="yellow">Win + Ctrl + Space</span> - плавающий режим окна <span color="yellow">Win + Shift + C</span> - закрыть окно <span color="white" font_desc="Arial 12 bold">4. Работа с тэгами</span> <span color="yellow">Win + номер тэга</span> - перейти на тэг <span color="yellow">Win + Ctrl + номер тэга</span> - открыть тэг вметсте с текущим тэгом <span color="yellow">Win + Shift + номер тэга</span> - переместить текущий клиент на тэг <span color="yellow">Win + Ctrl + Shift + номер тэга</span> - переместить клиент на тэг, оставив его и на текущем тэге ]] main:set_markup('<span font_desc="Arial 12" color="gray">'..main_text..'</span>') ------------------------------------------------------------------------------- -- Кладем виджет на wibox ------------------------------------------------------------------------------- local hotkeys_layout = wibox.layout.fixed.vertical() hotkeys_layout:add(title) hotkeys_layout:add(main) hotkeys_wbox:set_widget(hotkeys_layout) hotkeys.wibox = hotkeys_wbox return hotkeys[/spoiler]
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

Аватара пользователя
cadash
Сообщения: 292
Зарегистрирован: 27 авг 2013, 12:06
Темы: 59
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение cadash » 17 дек 2013, 19:49

А где виджет? Пересмотрел всю тему и не увидел ни одного виджета.
Нашёл только какой-то html недоделанный внутри языка синтаксиса СИ.

Аватара пользователя
lumberjack
Модератор
Сообщения: 1009
Зарегистрирован: 30 сен 2012, 04:04
Темы: 152
Откуда: Сургут
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение lumberjack » 17 дек 2013, 21:06

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

Аватара пользователя
cadash
Сообщения: 292
Зарегистрирован: 27 авг 2013, 12:06
Темы: 59
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение cadash » 17 дек 2013, 21:27

Тот текст на картинке и есть виждет? Вот ни когда бы не догадался.
Во первых я думал что-то интересное. А тут conky какой-то. Во вторых тысячный раз прошу, ни когда не делайте примеры и не пишите видео где у вас установлена тёмная тема. Если я вдруг вспомню и захочу кому-то продемонстрировать что-то из ваших разработок. Вот как мне это сделать, когда всё темно и не понятно что где.

Аватара пользователя
lumberjack
Модератор
Сообщения: 1009
Зарегистрирован: 30 сен 2012, 04:04
Темы: 152
Откуда: Сургут
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение lumberjack » 17 дек 2013, 22:11

cadash, а не дофига ли запросов?
взял бы, подправил, выложил свой вариант, да расписал изменения, что улучшил.
на форуме НИКТО НИКОМУ не обязан. все наработки и ответы, выложенные на форуме -- сугубо добровольное дело каждого. не нравится содержимое -- рашпиль в руки, охота марафет навести -- напильник. охота покритиковать кого-то -- есть личка. если уж на всеобщее обозрение свое ЧСВ показать охота -- создай тему здесь, радеешь за расово верный цвет в темах оформления -- тебе в ArtWork
и совет на будущее: ПРОЧТИ ПРАВИЛА

Аватара пользователя
ZEN
Администратор
Сообщения: 1350
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Re: awesome делимся виджетами

Сообщение ZEN » 17 дек 2013, 23:11

cadash писал(а):А где виджет? Пересмотрел всю тему и не увидел ни одного виджета.
Нашёл только какой-то html недоделанный внутри языка синтаксиса СИ.
Lua - скриптовый язык интерпретатор которого написан на С. Удобен тем, что можно биндить функции из С и без перекомпилирования вызывать из lua скрипта. Используется во многом в компьютерных играх. Что касается виджетов, то с чего ты взял, что его тут нет?
cadash писал(а):...тысячный раз прошу, ни когда не делайте примеры и не пишите видео где у вас установлена тёмная тема. Если я вдруг вспомню и захочу кому-то продемонстрировать что-то из ваших разработок. Вот как мне это сделать, когда всё темно и не понятно что где.
Не помню, что бы ты в тысячный раз просил меня или кого-либо из обитателей данного форума. Все, что нужно соблюдать на форуме, детально описано в правилах. Для своих пожеланий создавай свой форум, если здешние правила не устраивают (Правила форума, пункт 6.)
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

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

Re: awesome делимся виджетами

Сообщение olgmen » 19 дек 2013, 18:18

Индикатор сети

Виджет от vicious, входит в стандартные виджеты, немного переделал, теперь автоматом определяет какая сеть в данный момент подключена: eth, wifi или ppp0 и выводит скорость приема / передачи подключенной сети. Как прикрутить виджет описано в vicious. Измененный виджет http://dumpz.org/762344/

[spoiler]-- Network usage widget
netwidget = wibox.widget.textbox()
vicious.cache(vicious.widgets.net)

-- определяем что подключено eth, wifi или ppp0
local eth_file = '/proc/self/net/route'
local feth = io.open(eth_file, "r")
local alldata = feth:read("*a")
feth:close()
alldata = string.gsub(alldata, "[\n\r]", "")
local s,f,eth = string.find(alldata,"IRTT%s*([%a%d]*)")
-- вызываем виджет
vicious.register(netwidget, vicious.widgets.net,
'<span color="#CC9393">↓${'..eth..' down_kb}</span>' .. ' <span color="#7F9F7F">↑${'..eth..' up_kb}</span>', 2)
netwidget:buttons(
awful.util.table.join(
awful.button({}, 1,
function ()
awful.util.spawn( terminal .. " -e wicd-curses")
end),
awful.button({}, 3,
function ()
awful.util.spawn( terminal .. " -e ethstatus -s 768")
end)
)
)[/spoiler]
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

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

Re: awesome делимся виджетами

Сообщение olgmen » 25 дек 2013, 14:20

Виджет аналоговых часов в панель awesome

Изображение

код под спойлером

[spoiler]--analogclock
local analogclock = wibox.widget.base.make_widget()

analogclock.fit = function(analogclock, width, height)
local size = math.min(width, height)
return size, size
end

analogclock.draw = function(analogclock, wibox, cr, width, height)
local r = (width - (width % 2))/2
cr:set_line_width (1)
cr:arc(r,r,r-1,0,2*math.pi)
cr:stroke()
local t = os.date("*t")
local ht = ((t.hour % 12) / 12 + t.min / 720 + t.sec / 43200) * 2 * math.pi
local hx = math.floor(0.60 * r * math.sin(ht))
local hy = -math.floor(0.60 * r * math.cos(ht))
local mt = (t.min / 60 + t.sec / 3600) * 2 * math.pi
local mx = math.floor(0.90 * r * math.sin(mt))
local my = -math.floor(0.90 * r * math.cos(mt))
local st = t.sec / 60 * 2 * math.pi
local sx = math.floor(0.90 * r * math.sin(st))
local sy = -math.floor(0.90 * r * math.cos(st))
cr:move_to (r,r)
cr:line_to (r+hx, r+hy)
cr:move_to (r,r)
cr:line_to (r+mx, r+my)
cr:stroke()
cr:set_source_rgba(1,0,0,0.5)
cr:move_to (r,r)
cr:line_to (r+sx, r+sy)
cr:stroke()
end[/spoiler]
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

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

Re: awesome делимся виджетами

Сообщение olgmen » 04 янв 2014, 10:43

Индикатор переключения клавиатуры kbdd

Этот индикатор многие используют в awesome, но лично мне не нравится вывод индикатора в виде текста

Изображение

не очень то заметный индикатор. Поэтому я решил вместо текста выводить в панель иконки флагов. Покопавшись в своих "закромах", нашел иконки в виде круглых значков флагов us и ru. Нужные флажки можно найти на http://www.iconsearch.ru/search/?q=%F4%EB%E0%E3 единственное условие, флаги должны быть в формате png размером не более 48х48 и иметь названия us.png и ru.png. У меня флаги помещены в /home/olgmen/.config/awesome/icons но можно поместить их в любое место, просто в виджете прописать путь к иконкам.

Итак берем виджет kbdcfg, который выглядит так

-- переключение локали
kbdcfg = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = { { "us", "" }, { "ru", "" } }
kbdcfg.current = 1 -- us включается по умолчанию
kbdcfg.widget = wibox.widget.textbox()
kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][1] .. " ")

kbdcfg.switch = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
local t = kbdcfg.layout[kbdcfg.current]
kbdcfg.widget:set_text(" " .. t[1] .. " ")
os.execute( kbdcfg.cmd .. " " .. t[1] .. " " .. t[2] )
end
-- Подключаем мышку
kbdcfg.widget:buttons( awful.util.table.join(awful.button({ }, 1, function () kbdcfg.switch() end)))

Строка выводящая индикатор в панель,
right_layout:add(kbdcfg.widget)


и заменяем строки выводящие текст, на строки выводящие картинки, можно просто закомментировать не нужные строки, вдруг захочется вернуть дефолт. Изменения выделены синим цветом

-- переключение локали
kbdcfg = {}
kbdcfg.cmd = "setxkbmap"
kbdcfg.layout = { { "us", "" }, { "ru", "" } }
kbdcfg.current = 1 -- us включается по умолчанию
-- kbdcfg.widget = wibox.widget.textbox()
-- kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][1] .. " ")
-- строка создающая виджет kbdcfg.icon
kbdcfg.icon = wibox.widget.imagebox()
-- строка выводящая иконку флага на панель, здесь необходимо прописать путь к иконке
kbdcfg.icon:set_image("/home/olgmen/.config/awesome/icons/".. kbdcfg.layout[kbdcfg.current][1] ..".png")

kbdcfg.switch = function ()
kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
local t = kbdcfg.layout[kbdcfg.current]
-- kbdcfg.widget:set_text(" " .. t[1] .. " ")
-- строка изменяющая флаг при переключении локали
kbdcfg.icon:set_image(usrhome.."/.config/awesome/icons/".. t[1] ..".png")
os.execute( kbdcfg.cmd .. " " .. t[1] .. " " .. t[2] )
end

-- Подключаем мышку
--kbdcfg.widget:buttons( awful.util.table.join(awful.button({ }, 1, function () kbdcfg.switch() end)))
-- строка позволяющая переключать локаль с помощью мышки
kbdcfg.icon:buttons( awful.util.table.join(awful.button({ }, 1, function () kbdcfg.switch() end)))

И в заключении меняем строку выводящую индикатор на панель
--right_layout:add(kbdcfg.widget)
right_layout:add(kbdcfg.icon)

После перезагрузки получаем такой индикатор локали

Изображение
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

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

Re: awesome делимся виджетами

Сообщение olgmen » 22 янв 2014, 10:27

Аналоговые mem, cpu, температура cpu

Изображение

[spoiler="analogmem"]-- analogmem
local analogmem = wibox.widget.base.make_widget()

analogmem.fit = function(analogmem, width, height)
local size = math.min(width, height)
return size, size
end

analogmem.draw = function(analogmem, wibox, cr, width, height)
local r = (width - (width % 2))/2
cr:set_line_width (1)
cr:arc(r,r,r-1,0,2*math.pi)
cr:stroke()
cr:move_to(r + math.floor((r - 1) * math.cos(1.25*math.pi)),
r - math.floor((r - 1) * math.sin(1.25*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.25*math.pi)),
r - math.floor(0.75 * r * math.sin(1.25*math.pi)))
cr:move_to(r + math.floor((r - 1) * math.cos(1.75*math.pi)),
r - math.floor((r - 1) * math.sin(1.75*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.75*math.pi)),
r - math.floor(0.75 * r * math.sin(1.75*math.pi)))
cr:stroke()
local total = nil
local active = nil
for line in io.lines("/proc/meminfo") do
local name, value = string.match(line, "(%w+): +(%d+)")
if name == "MemTotal" then
total = value
else
if name == "Active" then
active = value
end
end
end
if total and active then
local t = 1.25 * math.pi - (math.pi * 1.5 * active / total)
local x = math.floor(0.90 * r * math.cos(t))
local y = -math.floor(0.90 * r * math.sin(t))
cr:set_line_width (2)
cr:set_source_rgba(1,0,0,0.5)
cr:move_to(r, r)
cr:line_to(r + x, r + y)
end
cr:stroke()
end[/spoiler]

[spoiler="analogcpu"]-- analogcpu
local analogcpu = wibox.widget.base.make_widget()

analogcpu.fit = function(analogcpu, width, height)
local size = math.min(width, height)
return size, size
end

analogcpu.draw = function(analogcpu, wibox, cr, width, height)
local r = (width - (width % 2))/2
cr:set_line_width (1)
cr:arc(r,r,r-1,0,2*math.pi)
-- cr:rectangle(0,0,width,height)
cr:stroke()
cr:move_to(r + math.floor((r - 1) * math.cos(1.25*math.pi)),
r - math.floor((r - 1) * math.sin(1.25*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.25*math.pi)),
r - math.floor(0.75 * r * math.sin(1.25*math.pi)))
cr:move_to(r + math.floor((r - 1) * math.cos(1.75*math.pi)),
r - math.floor((r - 1) * math.sin(1.75*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.75*math.pi)),
r - math.floor(0.75 * r * math.sin(1.75*math.pi)))
cr:stroke()

local cpu = {}
local cpu_usage = {}
local cpu_total = {}
local cpu_active = {}

local cpu_lines = {}

-- Get CPU stats
local f = io.open("/proc/stat")
for line in f:lines() do
if string.sub(line, 1, 3) ~= "cpu" then break end

cpu_lines[#cpu_lines+1] = {}

for i in string.gmatch(line, "[%s]+([^%s]+)") do
table.insert(cpu_lines[#cpu_lines], i)
end
end
f:close()

-- Ensure tables are initialized correctly
for i = #cpu_total + 1, #cpu_lines do
cpu_total = 0
cpu_usage = 0
cpu_active = 0
end

for i, v in ipairs(cpu_lines) do
-- Calculate totals
local total_new = 0
for j = 1, #v do
total_new = total_new + v[j]
end
local active_new = total_new - (v[4] + v[5])

-- Calculate percentage
local diff_total = total_new - cpu_total
local diff_active = active_new - cpu_active

if diff_total == 0 then diff_total = 1E-6 end
cpu_usage = math.floor((diff_active / diff_total) * 100)

-- Store totals
cpu_total = total_new
cpu_active = active_new

local t = 1.25 * math.pi - (math.pi * 1.5 * cpu_usage[1]/100)
local x = math.floor(0.90 * r * math.cos(t))
local y = -math.floor(0.90 * r * math.sin(t))

cr:set_line_width (1)
cr:set_source_rgba(1,0,0,0.5)
cr:move_to(r, r)
cr:line_to(r + x, r + y)
cr:stroke()
end
end[/spoiler]

[spoiler="analogcputemp"]-- ----------------------------------------------------- cpu temp
local analogcputemp = wibox.widget.base.make_widget()
local temp_file = "/sys/class/hwmon/hwmon0/device/temp2_input"

analogcputemp.fit = function(analogcputemp, width, height)
local size = math.min(width, height)
return size, size
end

analogcputemp.draw = function(analogcputemp, wibox, cr, width, height)
local r = (width - (width % 2))/2
cr:set_line_width (1)
cr:arc(r,r,r-1,0,2*math.pi)
-- cr:rectangle(0,0,width,height)
cr:stroke()
cr:move_to(r + math.floor((r - 1) * math.cos(1.25*math.pi)),
r - math.floor((r - 1) * math.sin(1.25*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.25*math.pi)),
r - math.floor(0.75 * r * math.sin(1.25*math.pi)))
cr:move_to(r + math.floor((r - 1) * math.cos(1.75*math.pi)),
r - math.floor((r - 1) * math.sin(1.75*math.pi)))
cr:line_to(r + math.floor(0.75 * r * math.cos(1.75*math.pi)),
r - math.floor(0.75 * r * math.sin(1.75*math.pi)))
cr:stroke()

local f=io.open(temp_file,"r")
if f == nil then return 0 end
io.close(f)
io.input(temp_file)
local temp = io.read("*number")/1000
io.close()

local t = 1.25 * math.pi - (math.pi * 1.5 * temp / 100)
local x = math.floor(0.90 * r * math.cos(t))
local y = -math.floor(0.90 * r * math.sin(t))
cr:set_line_width (2)
cr:set_source_rgba(1,0,0,0.5)
cr:move_to(r, r)
cr:line_to(r + x, r + y)
cr:stroke()
end[/spoiler]
Кто ищет, тот всегда найдет

Arch Linux
Conky - 1.9

Ответить

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

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