Как стать автором
Обновить

Lua и Conky — это просто. Часть 1 (Скелет)

Доброго времени суток, Хабравчане. Сегодня я расскажу, как использовать lua скрипты в conky. В статье мы разберем: добавление скрипта в conky, разберем его каркас и базовый синтаксис lua.

Добавление скрипта в conky


Для того чтобы добавить Lua скрипт conky, существуют связанные
с ней объекты. В первую очередь это lua_load и lua_draw_hook_pre
Указываем их до TEXT в .conkyrc.

lua_load используется для указания расположения lua скрипта. Например:
lua_load /home/username/script.lua

lua_draw_hook_pre говорит conky, какие функции надо запустить.Например:
lua_draw_hook_pre conky_main


Разбираем скелет


Он может выглядеть так:
 -- Добавляем cairo
require 'cairo'

 function conky_main()

	 if conky_window == nil then return end
	local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable,  conky_window.visual, conky_window.width, conky_window.height)
	cr = cairo_create(cs)
	 local updates=tonumber(conky_parse('${updates}'))
		
	if updates>5 then
		 print ("hello world")
	end -- закрываем if updates>5
		
	 cairo_destroy(cr)
	cairo_surface_destroy(cs)
	 cr=nil
end


Комментарии

 -- Комментарий в lua

Это однострочный комментарий в Lua. Он всегда начинается с --. Многострочные же открываются с --[[, а закрываются ]]. Как здесь:
--[[ Это
многострочный 
комментарий ]]


Добавление библиотек

Для выведения графики используется библиотека cairo, котору мы сейчас и добавим. Чтобы это сделать, нужно написать require и название библиотеки в кавычках.
	require 'cairo'


Объявляем главную функцию

function conky_ main()

Это объявление нашей главной функции, которую мы и добавили в
в lua_draw_hook_pre. Закрытие функции осуществляется ключевым словом end

Создаем «холст»

	if conky_window == nil then return end
	local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
	cr = cairo_create(cs)

Эти строчки нужны ТОЛЬКО в главной функции. Они создают «холст», на который lua и будет выводить текст и графику.

Частота обновления

	local updates=tonumber(conky_parse('${updates}'))
	if updates>5 then

Это нужно, если мы будем выводить информацию, которая часто меняется. Сначала мы создаем локальную переменную с помощью local, в которую помещаем объект conky, отвечающий за обновления.
Чтобы обратиться к объекту, используют conky_parse(). Например так:
conky_parse("${cpu}")

Но помните, все числа, которые вернули объекты, воспринимаются в lua как строки. Поэтому мы перевели их в числа с помощью tonumber().

Тело скрипта

Наконец, мы может что-нибудь выполнить. Более подробно вывод мы рассмотрим в следующей статье, а пока просто выведем сообщение в терминал. По традиции это будет Hello World!
print ("Hello World!")

Всегда запускайте conky в терминале для тестирования lua скрипта. Функиця print в этом так же будет полезна.

Конец «скелета»

end -- закрываем if updates>5
cairo_destroy(cr)
cairo_surface_destroy(cs)
cr=nil
end -- закрываем главную функцию

Сначала мы закрыли if, который был нужен для настройки частоты обновления. И провели «чистку».
У Lua есть одна проблема, со временем она начинает есть память. Этот код так же помагает избежать этого. Ну и последней строчкой мы закрыли главную функцию(conky_main).

Конец


Вот и всё. Мы узнали как добавить lua скрипт в conky и разобрали его «скелет». В следующих статьях мы начнем разбирать вывод информации на экран с помощью lua. Удачи!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.