Данный скрипт, написан на LUA+CAIRO, можно использовать и для вывода любых текстов.
Скрипт
--[[ calendar_words.lua by olgmen 10.03.2011
Выводит текущую дату в текстовом формате. Данный скрипт можно использовать для вывода любых текстов. Текст должен быть заключён в кавычки.
text -- любой текст по умолчанию выводится фраза "Conky is good for you !"
x, y -- координаты по горизонтали и вертикали, по умолчанию центр окна конки
colour -- цвет текста, по умолчанию белый (0xffffff)
alpha -- насыщенность цвета, по умолчанию = 1
font_name -- названия шрифта, по умолчанию = "Ubuntu"
font_size -- размер шрифта, по умолчанию = 14
angle -- угол наклона текста, по умолчанию = 0
italic -- тип шрифта курсив, по умолчанию отключен = false
bold -- тип шрифта жирный, по умолчанию отключен = false
h_align -- центровка текста по горизонтали, по умолчанию = "l"
Возможные варианты
"l" - координаты слева от текста
"c" - координаты посередине текста
"r" - координаты справа от текста
v_align -- центровка текста по вертикали, по умолчанию = "b"
Возможные варианты
"b" - текст выше оси x
"t" - текст ниже оси x
"m" - ось x проходит по середине текста
Для подключения скрипта необходимо в conkyrc добавить строки выше слова TEXT
lua_load ~/путь_до_скрипта/calendar_words.lua
lua_draw_hook_pre conky_draw_calendar
]]
require 'cairo'
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function date_to_words()
date = os.date("%d") -- забираем число
datecut = string.gsub(date, ".", "%1|")
datetable = string.split(datecut, "|")
if datetable[1] == "1" then
datetens = ""
datespacer = ""
if datetable[2] == "0" then dateunit = "ДЕСЯТОЕ"
elseif datetable[2] == "1" then dateunit = "ОДИННАДЦАТОЕ"
elseif datetable[2] == "2" then dateunit = "ДВЕНАДЦАТОЕ"
elseif datetable[2] == "3" then dateunit = "ТРИНАДЦАТОЕ"
elseif datetable[2] == "4" then dateunit = "ЧЕТЫРНАДЦАТОЕ"
elseif datetable[2] == "5" then dateunit = "ПЯТНАДЦАТОЕ"
elseif datetable[2] == "6" then dateunit = "ШЕСТНАДЦАТОЕ"
elseif datetable[2] == "7" then dateunit = "СЕМНАДЦАТОЕ"
elseif datetable[2] == "8" then dateunit = "ВОСЕМНАДЦАТОЕ"
elseif datetable[2] == "9" then dateunit = "ДЕВЯТНАДЦАТОЕ"
end
end
if datetable[1] == "0" or datetable[1] > "1" then
datespacer = ""
if datetable[1] == "2" then datetens = "ДВАДЦАТЬ"
elseif datetable[1] == "3" then datetens = "ТРИДЦАТЬ"
elseif datetable[1] == "0" then datetens = ""
end
if datetable[2] == "1" then dateunit = "ПЕРВОЕ"
elseif datetable[2] == "2" then dateunit = "ВТОРОЕ"
elseif datetable[2] == "3" then dateunit = "ТРЕТЬЕ"
elseif datetable[2] == "4" then dateunit = "ЧЕТВЕРТОЕ"
elseif datetable[2] == "5" then dateunit = "ПЯТОЕ"
elseif datetable[2] == "6" then dateunit = "ШЕСТОЕ"
elseif datetable[2] == "7" then dateunit = "СЕДЬМОЕ"
elseif datetable[2] == "8" then dateunit = "ВОСЬМОЕ"
elseif datetable[2] == "9" then dateunit = "ДЕВЯТОЕ"
elseif datetable[2] == "0" then dateunit = ""
datespacer = ""
end
end
if datetable[2] == "0" then
datetens = ""
datespacer = ""
if datetable[1] == "2" then dateunit = "ДВАДЦАТОЕ"
elseif datetable[1] == "3" then dateunit = "ТРИДЦАТОЕ"
end
end
return ((datetens) .. (datespacer) .. (dateunit))
end
-- ----------------------------------------------------------------
function day_to_words()
day = os.date("%u") -- забираем день недели
if day == "1" then day = "ПОНЕДЕЛЬНИК"
elseif day == "2" then day = "ВТОРНИК"
elseif day == "3" then day = "СРЕДА"
elseif day == "4" then day = "ЧЕТВЕРГ"
elseif day == "5" then day = "ПЯТНИЦА"
elseif day == "6" then day = "СУББОТА"
elseif day == "7" then day ="ВОСКРЕСЕНЬЕ"
end
return (day)
end
-- -----------------------------------------------------------------
function month_to_words()
month = os.date("%m") -- забираем месяц
if month == "01" then month = "ЯНВАРЯ"
elseif month == "02" then month = "ФЕВРАЛЯ"
elseif month == "03" then month = "МАРТА"
elseif month == "04" then month = "АПРЕЛЯ"
elseif month == "05" then month = "МАЯ"
elseif month == "06" then month = "ИЮНЯ"
elseif month == "07" then month = "ИЮЛЯ"
elseif month == "08" then month = "АВГУСТА"
elseif month == "09" then month = "СЕНТЯБРЯ"
elseif month == "10" then month = "ОКТЯБРЯ"
elseif month == "11" then month = "НОЯБРЯ"
elseif month == "12" then month = "ДЕКАБРЯ"
end
return (month)
end
function conky_draw_calendar()
calendar_settings={
{
text = "СЕГОДНЯ" .. " " .. day_to_words(),
x = 150,
y = 50,
bold = true,
h_align = "c",
},
{
text = date_to_words(),
x = 150,
y = 70,
bold = true,
h_align = "c",
},
{
text = month_to_words(),
x = 150,
y = 90,
bold = true,
h_align = "c",
},
{
text = "СЕГОДНЯ" .. " " .. day_to_words() .. " " .. date_to_words() .. " " .. month_to_words(),
x = 250,
y = 210,
bold = true,
h_align = "c",
angle = 90,
},
{
text = "СЕГОДНЯ" .. " " .. day_to_words(),
x = 140,
y = 170,
bold = true,
h_align = "c",
angle = 30,
},
{
text = date_to_words(),
x = 140,
y = 200,
bold = true,
h_align = "c",
angle = 30,
},
{
text = month_to_words(),
x = 140,
y = 230,
bold = true,
h_align = "c",
angle = 30,
},
{
text = date_to_words(),
x = 140,
y = 290,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
{
text = month_to_words(),
x = 140,
y = 310,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
{
text = day_to_words(),
x = 140,
y = 330,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
}
if conky_window == nil then return end
if tonumber(conky_parse("$updates"))<3 then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
for i,v in pairs(calendar_settings) do
cr = cairo_create (cs)
display_calendar(v)
cairo_destroy(cr)
end
cairo_surface_destroy(cs)
end
-- -----------------------------------------
-- функция перекодировки цвета
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- -----------------------------------------
function display_calendar(t)
if t.text == nil then t.text = "Conky is good for you !" end
if t.x == nil then t.x = conky_window.width/2 end
if t.y == nil then t.y = conky_window.height/2 end
if t.colour == nil then t.colour = 0xffffff end
if t.alpha == nil then t.alpha = 1 end
if t.font_name == nil then t.font_name = "Ubuntu" end
if t.font_size == nil then t.font_size = 14 end
if t.angle == nil then t.angle = 0 end
if t.italic == nil then t.italic = false end
if t.bold == nil then t.bold = false end
if t.h_align == nil then t.h_align = "l" end
if t.v_align == nil then t.v_align = "b" end
cairo_translate(cr, t.x, t.y)
cairo_rotate(cr, t.angle*math.pi/180)
-- настройка шрифта
local slant = CAIRO_FONT_SLANT_NORMAL
local weight =CAIRO_FONT_WEIGHT_NORMAL
if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
cairo_select_font_face(cr, t.font_name, slant, weight)
cairo_set_font_size(cr, t.font_size)
te=cairo_text_extents_t:create()
cairo_text_extents (cr,t.text,te)
cairo_set_source_rgba(cr, rgb_to_r_g_b(t.colour, t.alpha))
mx,my=0,0
if t.h_align=="c" then
mx=-te.width/2
elseif t.h_align=="r" then
mx=-te.width
end
if t.v_align=="m" then
my=-te.height/2-te.y_bearing
elseif t.v_align=="t" then
my=-te.y_bearing
end
cairo_move_to(cr,mx,my)
cairo_show_text(cr,t.text)
end
Скачать можно здесь
Скрипт
--[[ calendar_words.lua by olgmen 10.03.2011
Выводит текущую дату в текстовом формате. Данный скрипт можно использовать для вывода любых текстов. Текст должен быть заключён в кавычки.
text -- любой текст по умолчанию выводится фраза "Conky is good for you !"
x, y -- координаты по горизонтали и вертикали, по умолчанию центр окна конки
colour -- цвет текста, по умолчанию белый (0xffffff)
alpha -- насыщенность цвета, по умолчанию = 1
font_name -- названия шрифта, по умолчанию = "Ubuntu"
font_size -- размер шрифта, по умолчанию = 14
angle -- угол наклона текста, по умолчанию = 0
italic -- тип шрифта курсив, по умолчанию отключен = false
bold -- тип шрифта жирный, по умолчанию отключен = false
h_align -- центровка текста по горизонтали, по умолчанию = "l"
Возможные варианты
"l" - координаты слева от текста
"c" - координаты посередине текста
"r" - координаты справа от текста
v_align -- центровка текста по вертикали, по умолчанию = "b"
Возможные варианты
"b" - текст выше оси x
"t" - текст ниже оси x
"m" - ось x проходит по середине текста
Для подключения скрипта необходимо в conkyrc добавить строки выше слова TEXT
lua_load ~/путь_до_скрипта/calendar_words.lua
lua_draw_hook_pre conky_draw_calendar
]]
require 'cairo'
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function date_to_words()
date = os.date("%d") -- забираем число
datecut = string.gsub(date, ".", "%1|")
datetable = string.split(datecut, "|")
if datetable[1] == "1" then
datetens = ""
datespacer = ""
if datetable[2] == "0" then dateunit = "ДЕСЯТОЕ"
elseif datetable[2] == "1" then dateunit = "ОДИННАДЦАТОЕ"
elseif datetable[2] == "2" then dateunit = "ДВЕНАДЦАТОЕ"
elseif datetable[2] == "3" then dateunit = "ТРИНАДЦАТОЕ"
elseif datetable[2] == "4" then dateunit = "ЧЕТЫРНАДЦАТОЕ"
elseif datetable[2] == "5" then dateunit = "ПЯТНАДЦАТОЕ"
elseif datetable[2] == "6" then dateunit = "ШЕСТНАДЦАТОЕ"
elseif datetable[2] == "7" then dateunit = "СЕМНАДЦАТОЕ"
elseif datetable[2] == "8" then dateunit = "ВОСЕМНАДЦАТОЕ"
elseif datetable[2] == "9" then dateunit = "ДЕВЯТНАДЦАТОЕ"
end
end
if datetable[1] == "0" or datetable[1] > "1" then
datespacer = ""
if datetable[1] == "2" then datetens = "ДВАДЦАТЬ"
elseif datetable[1] == "3" then datetens = "ТРИДЦАТЬ"
elseif datetable[1] == "0" then datetens = ""
end
if datetable[2] == "1" then dateunit = "ПЕРВОЕ"
elseif datetable[2] == "2" then dateunit = "ВТОРОЕ"
elseif datetable[2] == "3" then dateunit = "ТРЕТЬЕ"
elseif datetable[2] == "4" then dateunit = "ЧЕТВЕРТОЕ"
elseif datetable[2] == "5" then dateunit = "ПЯТОЕ"
elseif datetable[2] == "6" then dateunit = "ШЕСТОЕ"
elseif datetable[2] == "7" then dateunit = "СЕДЬМОЕ"
elseif datetable[2] == "8" then dateunit = "ВОСЬМОЕ"
elseif datetable[2] == "9" then dateunit = "ДЕВЯТОЕ"
elseif datetable[2] == "0" then dateunit = ""
datespacer = ""
end
end
if datetable[2] == "0" then
datetens = ""
datespacer = ""
if datetable[1] == "2" then dateunit = "ДВАДЦАТОЕ"
elseif datetable[1] == "3" then dateunit = "ТРИДЦАТОЕ"
end
end
return ((datetens) .. (datespacer) .. (dateunit))
end
-- ----------------------------------------------------------------
function day_to_words()
day = os.date("%u") -- забираем день недели
if day == "1" then day = "ПОНЕДЕЛЬНИК"
elseif day == "2" then day = "ВТОРНИК"
elseif day == "3" then day = "СРЕДА"
elseif day == "4" then day = "ЧЕТВЕРГ"
elseif day == "5" then day = "ПЯТНИЦА"
elseif day == "6" then day = "СУББОТА"
elseif day == "7" then day ="ВОСКРЕСЕНЬЕ"
end
return (day)
end
-- -----------------------------------------------------------------
function month_to_words()
month = os.date("%m") -- забираем месяц
if month == "01" then month = "ЯНВАРЯ"
elseif month == "02" then month = "ФЕВРАЛЯ"
elseif month == "03" then month = "МАРТА"
elseif month == "04" then month = "АПРЕЛЯ"
elseif month == "05" then month = "МАЯ"
elseif month == "06" then month = "ИЮНЯ"
elseif month == "07" then month = "ИЮЛЯ"
elseif month == "08" then month = "АВГУСТА"
elseif month == "09" then month = "СЕНТЯБРЯ"
elseif month == "10" then month = "ОКТЯБРЯ"
elseif month == "11" then month = "НОЯБРЯ"
elseif month == "12" then month = "ДЕКАБРЯ"
end
return (month)
end
function conky_draw_calendar()
calendar_settings={
{
text = "СЕГОДНЯ" .. " " .. day_to_words(),
x = 150,
y = 50,
bold = true,
h_align = "c",
},
{
text = date_to_words(),
x = 150,
y = 70,
bold = true,
h_align = "c",
},
{
text = month_to_words(),
x = 150,
y = 90,
bold = true,
h_align = "c",
},
{
text = "СЕГОДНЯ" .. " " .. day_to_words() .. " " .. date_to_words() .. " " .. month_to_words(),
x = 250,
y = 210,
bold = true,
h_align = "c",
angle = 90,
},
{
text = "СЕГОДНЯ" .. " " .. day_to_words(),
x = 140,
y = 170,
bold = true,
h_align = "c",
angle = 30,
},
{
text = date_to_words(),
x = 140,
y = 200,
bold = true,
h_align = "c",
angle = 30,
},
{
text = month_to_words(),
x = 140,
y = 230,
bold = true,
h_align = "c",
angle = 30,
},
{
text = date_to_words(),
x = 140,
y = 290,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
{
text = month_to_words(),
x = 140,
y = 310,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
{
text = day_to_words(),
x = 140,
y = 330,
bold = true,
h_align = "c",
colour = 0x46d111,
alpha = 1,
},
}
if conky_window == nil then return end
if tonumber(conky_parse("$updates"))<3 then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
for i,v in pairs(calendar_settings) do
cr = cairo_create (cs)
display_calendar(v)
cairo_destroy(cr)
end
cairo_surface_destroy(cs)
end
-- -----------------------------------------
-- функция перекодировки цвета
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-- -----------------------------------------
function display_calendar(t)
if t.text == nil then t.text = "Conky is good for you !" end
if t.x == nil then t.x = conky_window.width/2 end
if t.y == nil then t.y = conky_window.height/2 end
if t.colour == nil then t.colour = 0xffffff end
if t.alpha == nil then t.alpha = 1 end
if t.font_name == nil then t.font_name = "Ubuntu" end
if t.font_size == nil then t.font_size = 14 end
if t.angle == nil then t.angle = 0 end
if t.italic == nil then t.italic = false end
if t.bold == nil then t.bold = false end
if t.h_align == nil then t.h_align = "l" end
if t.v_align == nil then t.v_align = "b" end
cairo_translate(cr, t.x, t.y)
cairo_rotate(cr, t.angle*math.pi/180)
-- настройка шрифта
local slant = CAIRO_FONT_SLANT_NORMAL
local weight =CAIRO_FONT_WEIGHT_NORMAL
if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
cairo_select_font_face(cr, t.font_name, slant, weight)
cairo_set_font_size(cr, t.font_size)
te=cairo_text_extents_t:create()
cairo_text_extents (cr,t.text,te)
cairo_set_source_rgba(cr, rgb_to_r_g_b(t.colour, t.alpha))
mx,my=0,0
if t.h_align=="c" then
mx=-te.width/2
elseif t.h_align=="r" then
mx=-te.width
end
if t.v_align=="m" then
my=-te.height/2-te.y_bearing
elseif t.v_align=="t" then
my=-te.y_bearing
end
cairo_move_to(cr,mx,my)
cairo_show_text(cr,t.text)
end
Скачать можно здесь
Комментариев нет:
Отправить комментарий