Итак на поверку lua оказался очень прост и буквально через 10 минут копания в его доках я уже спокойно "наваял" то, что мне хотелось. :)
А хотелось:
- Календарь. Для начала хотя бы простенький.
- Какой-то индикатор о частоте CPU, так как у моего бука бывает крышу сносит и он с дуру начинает опускать частоту проца, баг в BIOS. Но пере прошивать не хочу, ибо служебный.
- Индикатор поднятых интерфейсов.
Итак сделаем календарь для начала.
Что бы не парится с самим календарем возьмем консольную утилиту cal и просто обработаем ее вывод и полученный результат выкинем в naughty.notify.
-- Create floating cal
local calendar = nil
local offset = 0
function remove_calendar()
if calendar ~= nil then
naughty.destroy(calendar)
calendar = nil
offset = 0
end
end
function add_calendar(inc_offset)
local save_offset = offset
remove_calendar()
offset = save_offset + inc_offset
local datespec = os.date("*t")
local day = datespec.day
datespec = datespec.year * 12 + datespec.month - 1 + offset
datespec = (datespec % 12 + 1) .. " " .. math.floor(datespec / 12)
local cal = awful.util.pread("cal -m " .. datespec)
if offset == 0 then
cal = string.gsub(cal, "(%s)(" .. day .. ")(%s)", "%1%2%3")
end
cal = string.gsub(cal, "^%s*(.-)%s*$", "%1")
calendar = naughty.notify({
text = string.format('%s', "monospace", cal),
timeout = 0, hover_timeout = 0.5,
width = 160,
})
endВ общем тут все понятно, lua достаточно прозрачен в этом плане. :) Осталось только "забиндить" все это дело на событие. Сделаем это на введение мыши в область календаря:
-- change clockbox for your clock widget (e.g. mytextclock)
myclock.mouse_enter = function() add_calendar(0) end
myclock.mouse_leave = function() remove_calendar() end
myclock:buttons(awful.util.table.join(
awful.button({ }, 5, function() add_calendar(-1) end),
awful.button({ }, 4, function() add_calendar(1) end)
))Все, можно перегружать WM :)
Далее хочу индикатор, как я уже говорил. Тут тоже все просто:
создаем виджет с иконкой
mychipicon = widget({ type = "imagebox", align = "right" })
mychipicon.image = image(themes_dir .. "/my_sky/icons/cpu.xpm")на забываем подцепить его к статус бару
mywibox[s].widgets = { mylauncher,
mytaglist[s],
mytasklist[s],
mypromptbox[s],
mylayoutbox[s],
mychipicon,
s == 1 and mysystray or nil,
myclock }
Далее делаем функцию чтения частоты с процессора
-- {{{ cpu info
local cpufreq = ""
local f, err = io.open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", 'r')
if f then
cpufreq = f:read("*all")
f:close()
cpufreq = "CPU freq: " .. cpufreq/1000000 .. " GHz\n"
else
print(err)
cpufreq = ""
end
-- cpu info }}}И функцию чтения статуса сетевых интерфейсов
local r, err, ifname, ifstat = nil
local iftext = ""
local iflist = io.popen("ls /sys/class/net")
if not iflist then return end
for ifname in iflist:lines()
do
if not (ifname == "lo") then
f, err = io.open("/sys/class/net/" .. ifname .. "/carrier", "r")
if not f then break end
ifstat = f:read("*n")
f:close()
if ifstat == 1 then
iftext = iftext .. " " .. ifname
end
end
end
iflist:close()
return(iftext)
Ну и результат вывода этих двух функций запихиваем в нотифи
hw_info = naughty.notify({
text = string.format('%s%s', "monospace", cpufreq, if_stat),
timeout = 0, hover_timeout = 0.5,
})Ну и привяжем это дело, что бы при наведении мыши на картинку чипа открывалось это окошко:
mychipicon.mouse_enter = function() add_hwinfo() end mychipicon.mouse_leave = function() remove_hwinfo() end
Вот собственно и все. :) Полностью конфиг можно глянуть тут. Ну или патч, что бы наложить на дефолтный конфиг. :) Тему я уже выкладывал в этом посте.
Честно говоря не очень красиво вышло, так что как будет свободное время, сделаю поэстетичнее. ;) А пока чистый функционал. :)
"И так" пишется слитно.
ОтветитьУдалитьВсе то ты увидишь! :) Только зачем ты читал, тебе же не интересно это, Леха?! :)
ОтветитьУдалитьА где бы еще почитать такие мини-хауту?
ОтветитьУдалить2bvn13: ну я пишу такое как бывает настроение. ;) Но сейчас занят написанием игры для сына, так что не до этого. :)
ОтветитьУдалитьа сколько лет сыну, если не секрет, и что за игру пишете? я вот тоже подумывал о таком своей дочке... :)
ОтветитьУдалить2bvn13: так почитайте блог! Последние записи как раз про игру. ;)
ОтветитьУдалить