Категории раздела |
|
Автомобильные гаджеты, ремонт...
[143]
|
Безопасность IT
[404]
|
Блоки питания, Power Banks, зарядки...
[508]
|
Видеорегистраторы
[186]
|
Гаджеты для спорта и здоровья...
[190]
|
Гаджеты, аксессуары...
[627]
|
Измерительная техника, инструменты
[437]
|
Накопители данных
[232]
|
Нетбуки, Ноутбуки, Ультрабуки
[689]
|
Мультиварки, блендеры и не только...
[162]
|
Планшеты
[764]
|
Радар-детекторы
[26]
|
Роботы-пылесосы
[37]
|
Своими руками
[360]
|
Сети, сетевые технологии, оборудование...
[273]
|
Смартфоны
[4959]
|
Фотокамеры, объективы, искусство фотографии..
[541]
|
Умный дом
[50]
|
Электронные книги
[101]
|
CB, LPD, PMR- связь...
[170]
|
DECT, IP-телефоны
[18]
|
Drones, boats, cars...
[108]
|
electric cars
[35]
|
GPS-навигаторы, трекеры...
[51]
|
Linux и не только
[3981]
|
mini computers и не только...
[409]
|
News IT, Это интересно, ликбез...
[1120]
|
Smart TV, UltraHD, приставки, проекторы...
[415]
|
Smart Watch
[268]
|
Sound: наушники, плееры, усилители...
[618]
|
Windows 10...
[301]
|
Windows 11
[37]
|
| |
|
|
| | |
| Главная » 2014 » Март » 3 » Моё знакомство с WM Awesome. Часть 2
15:52 Моё знакомство с WM Awesome. Часть 2 |
Моё знакомство с WM Awesome. Часть 2
Продолжение моего т.н. знакомства с WM Awesome
Тут объявляем все виджеты, которые буду использоваться. Сразу стоит
отметить баг — при нажатии клавиши «отключить звук» звук исчезает, при
повторном нажатии — на виджете отображает, что звук включён, но его
нету. Приходится прописывать команду вручную в консоли, странно. Пока не
нашёл как его исправить. И ещё смущает отображаение громкости — 90% по
факту ~70 единиц в alsamixer, надо бы исправить, но никак не дойдёт
руки. Ну а остальное вроде как интуитивно понятно
Виджеты
opening_brace = '<span foreground="white" font_desc="Ubuntu">[</span>'
closing_brace = '<span foreground="white" font_desc="Ubuntu">] </span>'
function enbrace(str)
return " "..opening_brace..str..closing_brace..' '
end
function colorify(str, color)
return '<span foreground="'..color..'">'..str..'</span>'
end
function get_colorload(val)
local color = 'green'
if val > 85 then
color = 'red'
elseif val > 60 then
color = 'yellow'
end
return color
end
function format_throughput(val)
if (val < 1000) then
return string.format('%3dKB/s', val)
elseif (val < 10240) then
return string.format('%.1fMB/s', val/1024)
else
return string.format('%3dMB/s', val/1024)
end
end
one_sec_timer = timer{timeout = 1}
ten_sec_timer = timer{timeout = 10}
spacer_big = wibox.widget.textbox()
spacer_big:set_text(' ')
spacer_small = wibox.widget.textbox()
spacer_small:set_text(' ')
volumecfg = {}
volumecfg.cardid = 0
volumecfg.channel = "Master"
volumecfg.widget = wibox.widget.textbox()
vol_color = {}
volumecfg.mixercommand = function (command)
local fd = io.popen("amixer -c " .. volumecfg.cardid .. command)
local status = fd:read("*all")
fd:close()
local volume = string.match(status, "(%d?%d?%d)%%")
volume = string.format("% 3d", volume)
status = string.match(status, "%[(o[^%]]*)%]")
if string.find(status, "on", 1, true) then
volume = volume .. "%"
vol_color="cyan"
else
volume = volume .. "×"
vol_color = "red"
end
volumecfg.widget:set_markup(enbrace(colorify(volume, vol_color)))
end
volumecfg.update = function ()
volumecfg.mixercommand(" sget " .. volumecfg.channel)
end
volumecfg.up = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 1%+")
end
volumecfg.down = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " 1%-")
end
volumecfg.toggle = function ()
volumecfg.mixercommand(" sset " .. volumecfg.channel .. " toggle")
end
volumecfg.update()
client.connect_signal("manage", function (c, startup)
c.size_hints_honor = false
end)
batterybox = wibox.widget.textbox()
function battery ()
local io_info = io.open("/proc/acpi/battery/BAT0/info")
local io_state = io.open("/proc/acpi/battery/BAT0/state")
local str_info = io_info:read("*a")
local str_state = io_state:read("*a")
io.close(io_info)
io.close(io_state)
local capacity = str_info:match("last full capacity:%s+(%d+)")
local current = str_state:match("remaining capacity:%s+(%d+)")
local state = str_state:match("charging state:%s+(%a+)")
local rate = str_state:match("present rate:%s+(%d+)")
local st_color = 'green'
if state == 'discharging' then
st_color = 'red'
elseif state == 'charging' then
st_color = 'yellow'
end
local remain_time_str = 'inf'
remain_chrg = ((current * 100) / capacity)
if (('discharging' == state) and (nil ~= rate) and (rate > '0')) then
remain_time = current/rate
remain_time_str = string.format('%dh %.2dm', remain_time, remain_time*60%60)
end
local rem_color = 'red'
if remain_chrg > 15 then
rem_color = 'yellow'
end
if remain_chrg > 60 then
rem_color = 'green'
end
batterybox:set_markup( enbrace(colorify('bat: ', 'orange')
..colorify(string.format("%d%%", remain_chrg), rem_color)
..', '
..colorify(remain_time_str, rem_color)
..', '
..colorify(state, st_color)))
end
battery()
ten_sec_timer:connect_signal("timeout", battery)
membox = wibox.widget.textbox()
function memory()
local io_meminfo = io.open("/proc/meminfo")
local str_meminfo = io_meminfo:read("*a")
io.close(io_meminfo)
local total = str_meminfo:match("MemTotal:%s+(%d+)")
local free = str_meminfo:match("MemFree:%s+(%d+)")
local buffers = str_meminfo:match("Buffers:%s+(%d+)")
local cached = str_meminfo:match("Cached:%s+(%d+)")
local swap_total = str_meminfo:match("SwapTotal:%s+(%d+)")
local swap_free = str_meminfo:match("SwapFree:%s+(%d+)")
local swap_cached = str_meminfo:match("SwapCached:%s+(%d+)")
local total_free = free + buffers + cached
local total_swap_free = swap_free + swap_cached
local p_mem = 100*(total - total_free)/total
local mem_color = get_colorload(p_mem)
local sw_mem = 100*(swap_total - total_swap_free)/swap_total
local sw_mem_color = get_colorload(sw_mem)
local p_mem = 100*(total - total_free)/total
local mem_color = get_colorload(p_mem)
local sw_mem = 100*(swap_total - total_swap_free)/swap_total
local sw_mem_color = get_colorload(sw_mem)
membox:set_markup(enbrace(
colorify('mem: ', 'orange')
..colorify(string.format('%2d%%', p_mem), mem_color)
..'('..colorify(string.format('%3dMb', (total - total_free)/1024), mem_color)
..colorify(string.format('/%3dMb', (total)/1024), 'white')
..')'
..' | '
..colorify('swap: ', 'orange')
..colorify(string.format('%2d%%', sw_mem), sw_mem_color)
..'('..colorify(string.format('%3dMb', (swap_total - total_swap_free)/1024), sw_mem_color)
..colorify(string.format('/%3dMb', (swap_total)/1024), 'white')
..')'
)
)
end
memory()
one_sec_timer:connect_signal("timeout", memory)
cpugraph = awful.widget.graph()
cpugraph:set_width(75)
cpugraph:set_height(25)
cpugraph:set_background_color("#494B4F")
cpugraph:set_color({ type = "horisontal", from = { 0, 0 }, to = { 0, 20 }, stops = { { 0, "#FF5656" }, { 0.5, "#88A175" }, { 1, "#AECF96" } }})
vicious.register(cpugraph, vicious.widgets.cpu,
function (widget, args)
return args[1]
end)
cpubox = wibox.widget.textbox()
cpubox_img = wibox.widget.imagebox()
cpu_arr = {}
cpu0_arr = {}
cpu1_arr = {}
for i = 0, 4 do
cpu_arr[i] = 0
cpu0_arr[i] = 0
cpu1_arr[i] = 0
end
function parse_cpu(cpu, stat)
local cpu_new = {}
local ret = {}
cpu_new[0], cpu_new[1], cpu_new[2], cpu_new[3], cpu_new[4] = stat:match("cpu%d*%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)")
local idle = (cpu_new[3] - cpu[3]) + (cpu_new[4] - cpu[4])
local user = (cpu_new[1] - cpu[1]) + (cpu_new[0] - cpu[0])
local system = (cpu_new[2] - cpu[2])
local total = idle + user + system
local busy = user + system
ret['busy'] = busy*100/total
ret['sys'] = system*100/total
ret['user'] = user*100/total
ret['cpu'] = cpu_new
return ret
end
function cpu()
local io_stat = io.open("/proc/stat")
local str_stat = io_stat:read("*l")
io.close(io_stat)
local ret = parse_cpu(cpu_arr, str_stat)
cpu_arr = ret['cpu']
cpubox:set_markup (enbrace(colorify('cpu: ', 'orange')
..'('
..colorify(string.format('%3d%%', ret['busy']), get_colorload(ret['busy']))
..') | (u:'
..colorify(string.format('%3d%%', ret['user']), get_colorload(ret['user']))
..', s:'
..colorify(string.format('%3d%%', ret['sys']), get_colorload(ret['sys']))
..')'))
end
cpu()
one_sec_timer:connect_signal("timeout", cpu)
hddbox = wibox.widget.textbox()
hdd_r = 0
hdd_w = 0
hddlist = {'/sys/block/sda/stat', '/sys/block/sdb/stat'}
function hdd()
local new_r = 0
local new_w = 0
for i = 1, 2 do
local io_stat = io.open(hddlist[i])
local str_stat = io_stat:read("*a")
io.close(io_stat)
local rd, wr = str_stat:match("%s+%d+%s+%d+%s+(%d+)%s+%d+%s+%d+%s+%d+%s+(%d+)")
new_w = new_w + wr
new_r = new_r + rd
end
local r = (new_r - hdd_r)/2
local w = (new_w - hdd_w)/2
hdd_w = new_w
hdd_r = new_r
hddbox:set_markup ( enbrace(colorify('i/o: ', 'orange')
..'(r: '
..colorify(format_throughput(r), 'green')
..', w:'
..colorify(format_throughput(w), 'green')
..')'))
end
memwidget = awful.widget.progressbar()
memwidget:set_width(30)
memwidget:set_height(25)
memwidget:set_vertical(true)
memwidget:set_background_color('#494B4F')
memwidget:set_color('#AECF96')
cpugraph:set_color({ type = "linear", from = { 0, 0 }, to = { 0, 20 }, stops = { { 0, "#AECF96" }, { 0.5, "#88A175" }, { 1, "#FF5656" } }})
vicious.cache(vicious.widgets.mem)
vicious.register(memwidget, vicious.widgets.mem,
function (widget, args)
return args[1]
end, 1)
hdd()
one_sec_timer:connect_signal("timeout", hdd)
one_sec_timer:start()
ten_sec_timer:start()
text_clock = awful.widget.textclock()
systray = wibox.widget.systray()
Знаю, что верхнюю и нижнюю панель можно было создать вместе, а не
разделять, и так наверное было бы даже грамотнее, но у меня руки не
доходят переписать. Собственно в этой части мы создаём теги и отображаем
виджеты.
Панели
main_wibox = {}
prompt_box = {}
layout_box = {}
tag_list = {}
tag_list.buttons = awful.util.table.join(
awful.button({ }, left_button, awful.tag.viewonly ),
awful.button({ modkey }, left_button, awful.client.movetotag ),
awful.button({ }, right_button, awful.tag.viewtoggle ),
awful.button({ modkey }, right_button, awful.client.toggletag ),
awful.button({ }, plus_button, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end ),
awful.button({ }, minus_button, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end )
)
task_list = {}
task_list.buttons = awful.util.table.join(
awful.button({ }, left_button, function(c)
if c == client.focus then
c.minimized = true
else
c.minimized = false
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
end
end),
awful.button({ }, right_button, function(c)
if instance then
instance:hide()
instance = nil
else
instance = awful.menu.clients({ width=250 })
end
end),
awful.button({ }, plus_button, function ()
awful.client.focus.byidx(1)
if client.focus then
client.focus:raise()
end
end),
awful.button({ }, minus_button, function()
awful.client.focus.byidx(-1)
if client.focus then
client.focus:raise()
end
end)
)
for s = 1, screen.count() do
tag_list[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, tag_list.buttons)
task_list[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, task_list.buttons)
main_wibox[s] = awful.wibox({ position = "top", height = "28", screen = s })
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(launcher)
left_layout:add(tag_list[s])
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(volumecfg.widget)
right_layout:add(text_clock)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_middle(task_list[s])
layout:set_right(right_layout)
main_wibox[s]:set_widget(layout)
end
bottom_wibox = {}
bottom_prompt_box = {}
botton_layout_box = {}
for s = 1, screen.count() do
layout_box[s] = awful.widget.layoutbox(s)
layout_box[s]:buttons(awful.util.table.join(
awful.button({ }, left_button, function () awful.layout.inc(layouts, 1) end),
awful.button({ }, right_button, function () awful.layout.inc(layouts, -1) end)
)
)
bottom_prompt_box[s] = awful.widget.prompt()
bottom_wibox[s] = awful.wibox({ position = "bottom", height = "25", screen = s })
local l_layout = wibox.layout.fixed.horizontal()
l_layout:add(bottom_prompt_box[s])
l_layout:add(spacer_small)
l_layout:add(cpubox)
l_layout:add(cpugraph)
l_layout:add(spacer_small)
l_layout:add(membox)
l_layout:add(memwidget)
local r_layout = wibox.layout.fixed.horizontal()
r_layout:add(hddbox)
r_layout:add(spacer_small)
r_layout:add(batterybox)
r_layout:add(spacer_small)
r_layout:add(layout_box[s])
local lay = wibox.layout.align.horizontal()
lay:set_left(l_layout)
lay:set_right(r_layout)
bottom_wibox[s]:set_widget(lay)
end
http://habrahabr.ru/post/214467/
|
Категория: Linux и не только |
Просмотров: 610 |
Добавил: laptop
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
| |
| | |
|
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Внимание! |
|
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
| |
|
|