Pull to refresh

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. Удачи!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.