Итак на поверку 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: так почитайте блог! Последние записи как раз про игру. ;)
ОтветитьУдалить