среда, 26 января 2011 г.

Простые Conky-часы на Lua

Предисловие
Весна все ближе и ближе. Пора задумываться о том, чем засеять дачу или огород. Разобраться во всем разнообразии культур поможет интернет магазин семян - florium.net.ua. Более 20 сортов огурцов и томатов.

Немного отредактировав иконки на панели Cairo-Dock и изменив десклет "Переключатель рабочих столов", получил вот такой результат:


Пора закрыть окружающее пространство чем-нибудь полезным. Например, часами, чтобы знать, когда же закончится рабочий день (: Самый простой и гибкий инструмент для этого, как известно, Conky.
Так как основная часть конфигурации на Lua, файл ".conkyrc" будет простым:



own_window yes
own_window_type normal
own_window_argb_visual yes
own_window_transparent yes 
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
alignment top_left
gap_x 100
gap_y 100
update_interval 1.0
lua_load /home/ramzes/LuaConky/Clock.lua
lua_draw_hook_pre startlua

TEXT
${offset 500}${voffset 200}

Думаю, здесь пояснять ничего не надо. Скрипт Lua будет немного побольше, с использованием функций, которым уже приблизительно полгода:

--[[Clock.lua by ramZport, http://ramzport.blogspot.com]]--

require 'cairo'

--[[Начальная функция вызываемая из Conky]]--

function conky_startlua()

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)

sFont = 'Ubuntu'
nColor = 0x000000
nAlpha = 0.05

 tWeekDay={'понедельник', 'вторник', 'среда', 'четверг',
'пятница', 'суббота', 'воскресенье'}
tNameMonth = {'января', 'февраля', 'марта', 'апреля', 'мая',
'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября',
'декабря'}

fDrawTextCenter (250, 150,
os.date('%H') .. ':' .. os.date('%M'), 196)
fDrawTextCenter (250, 190,
tWeekDay[tonumber(os.date('%u'))] .. ', ' ..
os.date('%d') .. ' ' ..
tNameMonth[tonumber(os.date('%m'))], 36)

cairo_destroy(cr)

end

--[[Функция перевода цвета из RGB в ARGB]]--

function fRGBtoARGB (nColor, nAlpha)

-- nColor - цвет RGB (0x000000)
-- nAlpha - степень прозрачности, от 0 до 1

return ((nColor / 0x10000) % 0x100) / 255.,
((nColor / 0x100) % 0x100) / 255.,
(nColor % 0x100) / 255., nAlpha

end

--[[Функция вывода текста с выравниванием по центру]]--

function fDrawTextCenter (nXCenter, nYCenter, sText, sFontSize)

-- nXCenter, nYCenter - координаты центра для вывода
-- sText - отображаемый текст
-- sFontSize - размер шрифта

local extents = cairo_text_extents_t:create()

cairo_select_font_face (cr, sFont, 0, 1)
cairo_set_font_size (cr, sFontSize)
cairo_text_extents (cr, sText, extents)

local nXSpace = nXCenter-(extents.width/2)
local nYSpace = nYCenter

cairo_move_to (cr, nXSpace, nYSpace)
cairo_set_source_rgba(cr, fRGBtoARGB (nColor, nAlpha))
cairo_show_text(cr, sText)

end

Конечно, можно было бы еще подсократить, но так проще будет подстраивать. И как итог:


Стало немного по-уютней (:


Смотри также

4 коммент.:

  1. r1290z, немного "игрушечно", но зато наглядно (:

    ОтветитьУдалить
  2. Мое оформление Windows XP получилось довольно похожим: http://john-spade.blogspot.com/2011/01/windows-xp-mac-os-x-leopard.html

    ОтветитьУдалить
  3. John Spade, похоже, вот только Ubuntu выигрывает засчет рабочих столов. Cairo-Dock'овский десклет позволяет удобно переключаться между рабочими столами и свернутыми приложениями. Хотя, что в Ubuntu, что в Windows есть горячие клавиши..

    ОтветитьУдалить