Apresente aqui temas que gostou, skins de programas, ícones, wallpapers, conky's, etc. Ou seja, tudo o que possa alterar de estético no seu Ubuntu, apresente aqui. Em caso de dúvidas de personalização ou se quiser mostrá-la ao mundo, utilize esta secção!
This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script.
IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement near the end of the script uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua): lua_load ~/scripts/clock_rings-v1.1.1.lua lua_draw_hook_pre clock_rings
Changelog: + v1.1.1 -- Fixed minor bug that caused the script to crash if conky_parse() returns a nil value (20.10.2009) + v1.1 -- Added colour option for clock hands (07.10.2009) + v1.0 -- Original release (30.09.2009) ]]
function draw_ring(cr,t,pt) local w,h=conky_window.width,conky_window.height
local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle'] local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
local angle_0=sa*(2*math.pi/360)-math.pi/2 local angle_f=ea*(2*math.pi/360)-math.pi/2 local t_arc=t*(angle_f-angle_0)
--Draw background ring cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f) cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga)) cairo_set_line_width(cr,ring_w) cairo_stroke(cr)
--Draw indicator ring cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc) cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga)) cairo_stroke(cr) end
function draw_clock_hands(cr,xc,yc) local secs,mins,hours,secs_arc,mins_arc,hours_arc local xh,yh,xm,ym,xs,ys
--Draw minute hand xm=xc+0.95*clock_r*math.sin(mins_arc) ym=yc-0.95*clock_r*math.cos(mins_arc) cairo_move_to(cr,xc,yc) cairo_line_to(cr,xm,ym) -- cairo_set_line_width(cr,3) cairo_stroke(cr)
-- Draw seconds hand if show_seconds then xs=xc+1.1*clock_r*math.sin(secs_arc) ys=yc-1.1*clock_r*math.cos(secs_arc) cairo_move_to(cr,xc,yc) cairo_line_to(cr,xs,ys) -- cairo_set_line_width(cr,1) cairo_stroke(cr) end end
function conky_clock_rings() local function setup_rings(cr,pt) local str='' local value=0
value=tonumber(str) if value == nil then value = 0 end
--Les ajouts suivants permettent de corriger le retard prit par les anneaux --Ajout wlourf : conversion des minutes en centièmes d'heures if pt['arg'] == "%I.%M" then value=os.date("%I")+os.date("%M")/60 if value>12 then value=value-12 end end
--Ajout Fenouille84 : conversion des secondes en centièmes de minutes if pt['arg'] == "%M.%S" then value=os.date("%M")+os.date("%S")/60 end --Fin ajout
pct=value/pt['max'] draw_ring(cr,pct,pt) end
--Check that Conky has been running for at least 5s 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)
local cr=cairo_create(cs)
local updates=conky_parse('${updates}') update_num=tonumber(updates)
if update_num>5 then for i in pairs(settings_table) do setup_rings(cr,settings_table[i]) end end
This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script.
IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement near the end of the script uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua): lua_load ~/scripts/clock_rings-v1.1.1.lua lua_draw_hook_pre clock_rings
Changelog: + v1.1.1 -- Fixed minor bug that caused the script to crash if conky_parse() returns a nil value (20.10.2009) + v1.1 -- Added colour option for clock hands (07.10.2009) + v1.0 -- Original release (30.09.2009) ]]
function draw_ring(cr,t,pt) local w,h=conky_window.width,conky_window.height
local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle'] local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
local angle_0=sa*(2*math.pi/360)-math.pi/2 local angle_f=ea*(2*math.pi/360)-math.pi/2 local t_arc=t*(angle_f-angle_0)
--Draw background ring cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f) cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga)) cairo_set_line_width(cr,ring_w) cairo_stroke(cr)
--Draw indicator ring cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc) cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga)) cairo_stroke(cr) end
function draw_clock_hands(cr,xc,yc) local secs,mins,hours,secs_arc,mins_arc,hours_arc local xh,yh,xm,ym,xs,ys
--Draw minute hand xm=xc+0.95*clock_r*math.sin(mins_arc) ym=yc-0.95*clock_r*math.cos(mins_arc) cairo_move_to(cr,xc,yc) cairo_line_to(cr,xm,ym) -- cairo_set_line_width(cr,3) cairo_stroke(cr)
-- Draw seconds hand if show_seconds then xs=xc+1.1*clock_r*math.sin(secs_arc) ys=yc-1.1*clock_r*math.cos(secs_arc) cairo_move_to(cr,xc,yc) cairo_line_to(cr,xs,ys) -- cairo_set_line_width(cr,1) cairo_stroke(cr) end end
function conky_clock_rings() local function setup_rings(cr,pt) local str='' local value=0
value=tonumber(str) if value == nil then value = 0 end
--Les ajouts suivants permettent de corriger le retard prit par les anneaux --Ajout wlourf : conversion des minutes en centièmes d'heures if pt['arg'] == "%I.%M" then value=os.date("%I")+os.date("%M")/60 if value>12 then value=value-12 end end
--Ajout Fenouille84 : conversion des secondes en centièmes de minutes if pt['arg'] == "%M.%S" then value=os.date("%M")+os.date("%S")/60 end --Fin ajout
pct=value/pt['max'] draw_ring(cr,pct,pt) end
--Check that Conky has been running for at least 5s 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)
local cr=cairo_create(cs)
local updates=conky_parse('${updates}') update_num=tonumber(updates)
if update_num>5 then for i in pairs(settings_table) do setup_rings(cr,settings_table[i]) end end
draw_clock_hands(cr,clock_x,clock_y) end
AGARB REGOR
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."
--[[ BARGRAPH WIDGET v2.0 by wlourf (12.07.2010) this widget draws a bargraph with differe,ts effects http://u-scripts.blogspot.com/2010/07/bargraph-widget.html
Parameters are : 3 parameters are mandatory name - the name of the conky variable to display, for example for {$cpu cpu0}, just write name="cpu" arg - the argument of the above variable, for example for {$cpu cpu0}, just write arg="cpu0" arg can be a numericla value if name="" max - the maximum value the above variable can reach, for example for {$cpu cpu0}, just write max=100
Optional parameters: x,y - coordinates of the starting point of the bar, default = middle of the conky window cap - end of cap line, ossibles values are r,b,s (for round, butt, square), default="b" http://www.cairographics.org/samples/set_line_cap/ angle - angle of rotation of the bar in degress, default = 0 (i.e. a vertical bar) set to 90 for an horizontal bar skew_x - skew bar around x axis, défaut = 0 skew_y - skew bar around y axis, défaut = 600 blocks - number of blocks to display for a bar (values >0) , default= 10 height - height of a block, default=20 pixels width - width of a block, default=20 pixels space - space between 2 blocks, default=2 pixels angle_bar - this angle is used to draw a bar on a circular way (ok, this is no more a bar !) default=0 radius - for cicular bars, internal radius, default=0 with radius, parameter width has no more effect.
Colours below are defined into braces {colour in hexadecimal, alpha} fg_colour - colour of a block ON, default= {0x00FF00,1} bg_colour - colour of a block OFF, défaut = {0x00FF00,0.5} alarm - threshold, values after this threshold will use alarm_colour colour , default=max alarm_colour - colour of a block greater than alarm, default=fg_colour smooth - (true or false), create a gradient from fg_colour to bg_colour, default=false mid_colour - colours to add to gradient, with this syntax {position into the gradient (0 to1), colour hexa, alpha} for example, this table {{0.25,0xff0000,1},{0.5,0x00ff00,1},{0.75,0x0000ff,1}} will add 3 colurs to gradient created by fg_colour and alarm_colour, default=no mid_colour led_effect - add LED effects to each block, default=no led_effect if smooth=true, led_effect is not used possibles values : "r","a","e" for radial, parallelel, perdendicular to the bar (just try!) led_effect has to be used with theses colours : fg_led - middle colour of a block ON, default = fg_colour bg_led - middle colour of a block OFF, default = bg_colour alarm_led - middle colour of a block > ALARM, default = alarm_colour
reflection parameters, not avaimable for circular bars reflection_alpha - add a reflection effect (values from 0 to 1) default = 0 = no reflection other values = starting opacity reflection_scale - scale of the reflection (default = 1 = height of text) reflection_length - length of reflection, define where the opacity will be set to zero calues from 0 to 1, default =1 reflection - position of reflection, relative to a vertical bar, default="b" possibles values are : "b","t","l","r" for bottom, top, left, right
v1.0 (10 Feb. 2010) original release v1.1 (13 Feb. 2010) numeric values can be passed instead conky stats with parameters name="", arg = numeric_value v1.2 (28 Feb. 2010) just renamed the widget to bargraph v1.3 (03 March 2010) added parameters radius & angle_bar to draw the bar in a circular way v2.0 (12 Jul. 2010) rewrite script + add reflection effects and parameters are now set into tables ]]
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) --prevent segmentation error when reading cpu state if tonumber(conky_parse('${updates}'))>3 then for i in pairs(bars_settings) do
draw_multi_bar_graph(bars_settings[i])
end end cairo_destroy(cr) cairo_surface_destroy(cs)
end
function draw_multi_bar_graph(t) cairo_save(cr) --check values if t.name==nil and t.arg==nil then print ("No input values ... use parameters 'name' with 'arg' or only parameter 'arg' ") return end if t.max==nil then print ("No maximum value defined, use 'max'") return end if t.name==nil then t.name="" end if t.arg==nil then t.arg="" end
--set default values 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.blocks == nil then t.blocks=10 end if t.height == nil then t.height=10 end if t.angle == nil then t.angle=0 end t.angle = t.angle*math.pi/180 --line cap style if t.cap==nil then t.cap = "b" end local cap="b" for i,v in ipairs({"s","r","b"}) do if v==t.cap then cap=v end end delta=0 if t.cap=="r" or t.cap=="s" then delta = t.height end if cap=="s" then cap = CAIRO_LINE_CAP_SQUARE elseif cap=="r" then cap = CAIRO_LINE_CAP_ROUND elseif cap=="b" then cap = CAIRO_LINE_CAP_BUTT end --end line cap style --if t.led_effect == nil then t.led_effect="r" end if t.width == nil then t.width=20 end if t.space == nil then t.space=2 end if t.radius == nil then t.radius=0 end if t.angle_bar == nil then t.angle_bar=0 end t.angle_bar = t.angle_bar*math.pi/360 --halt angle
--colours if t.bg_colour == nil then t.bg_colour = {0x00FF00,0.5} end if #t.bg_colour~=2 then t.bg_colour = {0x00FF00,0.5} end if t.fg_colour == nil then t.fg_colour = {0x00FF00,1} end if #t.fg_colour~=2 then t.fg_colour = {0x00FF00,1} end if t.alarm_colour == nil then t.alarm_colour = t.fg_colour end if #t.alarm_colour~=2 then t.alarm_colour = t.fg_colour end
if t.mid_colour ~= nil then for i=1, #t.mid_colour do if #t.mid_colour[i]~=3 then print ("error in mid_color table") t.mid_colour[i]={1,0xFFFFFF,1} end end end
if t.bg_led ~= nil and #t.bg_led~=2 then t.bg_led = t.bg_colour end if t.fg_led ~= nil and #t.fg_led~=2 then t.fg_led = t.fg_colour end if t.alarm_led~= nil and #t.alarm_led~=2 then t.alarm_led = t.fg_led end
if t.led_effect~=nil then if t.bg_led == nil then t.bg_led = t.bg_colour end if t.fg_led == nil then t.fg_led = t.fg_colour end if t.alarm_led == nil then t.alarm_led = t.fg_led end end
if t.alarm==nil then t.alarm = t.max end --0.8*t.max end if t.smooth == nil then t.smooth = false end
if t.skew_x == nil then t.skew_x=0 else t.skew_x = math.pi*t.skew_x/180 end if t.skew_y == nil then t.skew_y=0 else t.skew_y = math.pi*t.skew_y/180 end
if t.reflection_alpha==nil then t.reflection_alpha=0 end if t.reflection_length==nil then t.reflection_length=1 end if t.reflection_scale==nil then t.reflection_scale=1 end
--end of default values
local function rgb_to_r_g_b(col_a) return ((col_a[1] / 0x10000) % 0x100) / 255., ((col_a[1] / 0x100) % 0x100) / 255., (col_a[1] % 0x100) / 255., col_a[2] end
--functions used to create patterns
local function create_smooth_linear_gradient(x0,y0,x1,y1) local pat = cairo_pattern_create_linear (x0,y0,x1,y1) cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour)) if t.mid_colour ~=nil then for i=1, #t.mid_colour do cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]})) end end return pat end
local function create_smooth_radial_gradient(x0,y0,r0,x1,y1,r1) local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1) cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour)) if t.mid_colour ~=nil then for i=1, #t.mid_colour do cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]})) end end return pat end
local function create_led_linear_gradient(x0,y0,x1,y1,col_alp,col_led) local pat = cairo_pattern_create_linear (x0,y0,x1,y1) ---delta, 0,delta+ t.width,0) cairo_pattern_add_color_stop_rgba (pat, 0.0, rgb_to_r_g_b(col_alp)) cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1.0, rgb_to_r_g_b(col_alp)) return pat end
local function create_led_radial_gradient(x0,y0,r0,x1,y1,r1,col_alp,col_led,mode) local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1) if mode==3 then cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_alp)) cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp)) else cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp)) end return pat end
local function draw_single_bar() --this fucntion is used for bars with a single block (blocks=1) but --the drawing is cut in 3 blocks : value/alarm/background --not zvzimzblr for circular bar local function create_pattern(col_alp,col_led,bg) local pat
if not t.smooth then if t.led_effect=="e" then pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led) elseif t.led_effect=="a" then pat = create_led_linear_gradient (t.width/2, 0,t.width/2,-t.height,col_alp,col_led) elseif t.led_effect=="r" then pat = create_led_radial_gradient (t.width/2, -t.height/2, 0, t.width/2,-t.height/2,t.height/1.5,col_alp,col_led,2) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end else if bg then pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour)) else pat = create_smooth_linear_gradient(t.width/2, 0, t.width/2,-t.height) end end return pat end
local y1=-t.height*pct/100 local y2=nil if pct>(100*t.alarm/t.max) then y1 = -t.height*t.alarm/100 y2 = -t.height*pct/100 if t.smooth then y1=y2 end end
if t.angle_bar==0 then
--block for fg value pat = create_pattern(t.fg_colour,t.fg_led,false) cairo_set_source(cr,pat) cairo_rectangle(cr,0,0,t.width,y1) cairo_fill(cr)
-- block for alarm value if not t.smooth and y2 ~=nil then pat = create_pattern(t.alarm_colour,t.alarm_led,false) cairo_set_source(cr,pat) cairo_rectangle(cr,0,y1,t.width,y2-y1) cairo_fill(cr) y3=y2 else y2,y3=y1,y1 end -- block for bg value cairo_rectangle(cr,0,y2,t.width,-t.height-y3) pat = create_pattern(t.bg_colour,t.bg_led,true) cairo_set_source(cr,pat) cairo_pattern_destroy(pat) cairo_fill(cr) end end --end single bar
local function draw_multi_bar() --function used for bars with 2 or more blocks for pt = 1,t.blocks do --set block y local y1 = -(pt-1)*(t.height+t.space) local light_on=false
--set colors local col_alp = t.bg_colour local col_led = t.bg_led if pct>=(100/t.blocks) or pct>0 then --ligth on or not the block if pct>=(pcb*(pt-1)) then light_on = true col_alp = t.fg_colour col_led = t.fg_led if pct>=(100*t.alarm/t.max) and (pcb*pt)>(100*t.alarm/t.max) then col_alp = t.alarm_colour col_led = t.alarm_led end end end
--set colors --have to try to create gradients outside the loop ? local pat
if not t.smooth then if t.angle_bar==0 then if t.led_effect=="e" then pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led) elseif t.led_effect=="a" then pat = create_led_linear_gradient (t.width/2, -t.height/2+y1,t.width/2,0+t.height/2+y1,col_alp,col_led) elseif t.led_effect=="r" then pat = create_led_radial_gradient (t.width/2, y1, 0, t.width/2,y1,t.width/1.5,col_alp,col_led,2) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end else if t.led_effect=="a" then pat = create_led_radial_gradient (0, 0, t.radius+(t.height+t.space)*(pt-1), 0, 0, t.radius+(t.height+t.space)*(pt), col_alp,col_led,3) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end
end else
if light_on then if t.angle_bar==0 then pat = create_smooth_linear_gradient(t.width/2, t.height/2, t.width/2,-(t.blocks-0.5)*(t.height+t.space)) else pat = create_smooth_radial_gradient(0, 0, (t.height+t.space), 0,0,(t.blocks+1)*(t.height+t.space),2) end else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour)) end end cairo_set_source (cr, pat) cairo_pattern_destroy(pat)
--draw a block if t.angle_bar==0 then cairo_move_to(cr,0,y1) cairo_line_to(cr,t.width,y1) else cairo_arc( cr,0,0, t.radius+(t.height+t.space)*(pt)-t.height/2, -t.angle_bar -math.pi/2 , t.angle_bar -math.pi/2) end cairo_stroke(cr) end end
local function setup_bar_graph() --function used to retrieve the value to display and to set the cairo structure if t.blocks ~=1 then t.y=t.y-t.height/2 end
local value = 0 if t.name ~="" then value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg))) else value = tonumber(t.arg) end
local matrix0 = cairo_matrix_t:create() cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0) cairo_transform(cr,matrix0)
--call the drawing function for blocks if t.blocks==1 and t.angle_bar==0 then draw_single_bar() if t.reflection=="t" or t.reflection=="b" then cairo_translate(cr,0,-t.height) end else draw_multi_bar() end
--dot for reminder --[[ if t.blocks ~=1 then cairo_set_source_rgba(cr,1,0,0,1) cairo_arc(cr,0,t.height/2,3,0,2*math.pi) cairo_fill(cr) else cairo_set_source_rgba(cr,1,0,0,1) cairo_arc(cr,0,0,3,0,2*math.pi) cairo_fill(cr) end ]] --call the drawing function for reflection and prepare the mask used if t.reflection_alpha>0 and t.angle_bar==0 then local pat2 local matrix1 = cairo_matrix_t:create() if t.angle_bar==0 then pts={-delta/2,(t.height+t.space)/2,t.width+delta,-(t.height+t.space)*(t.blocks)} if t.reflection=="t" then cairo_matrix_init (matrix1,1,0,0,-t.reflection_scale,0,-(t.height+t.space)*(t.blocks-0.5)*2*(t.reflection_scale+1)/2) pat2 = cairo_pattern_create_linear (t.width/2,-(t.height+t.space)*(t.blocks),t.width/2,(t.height+t.space)/2) elseif t.reflection=="r" then cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,delta+2*t.width,0) pat2 = cairo_pattern_create_linear (delta/2+t.width,0,-delta/2,0) elseif t.reflection=="l" then cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,-delta,0) pat2 = cairo_pattern_create_linear (-delta/2,0,delta/2+t.width,-0) else --bottom cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(t.height+t.space)*(t.reflection_scale+1)/2) pat2 = cairo_pattern_create_linear (t.width/2,(t.height+t.space)/2,t.width/2,-(t.height+t.space)*(t.blocks)) end end cairo_transform(cr,matrix1)
if t.blocks==1 and t.angle_bar==0 then draw_single_bar() cairo_translate(cr,0,-t.height/2) else draw_multi_bar() end
cairo_set_line_width(cr,0.01) cairo_pattern_add_color_stop_rgba (pat2, 0,0,0,0,1-t.reflection_alpha) cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1) if t.angle_bar==0 then cairo_rectangle(cr,pts[1],pts[2],pts[3],pts[4]) end cairo_clip_preserve(cr) cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR) cairo_stroke(cr) cairo_mask(cr,pat2) cairo_pattern_destroy(pat2) cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
end --reflection
end --setup_bar_graph()
--start here ! setup_bar_graph() cairo_restore(cr) end
AGARB REGOR
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."
This script draws percentage meters as rings. It is fully customisable; all options are described in the script.
IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua): lua_load ~/scripts/rings-v1.2.1.lua lua_draw_hook_pre ring_stats
Changelog: + v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009) + v1.2 -- Added option for the ending angle of the rings (07.10.2009) + v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009) + v1.0 -- Original release (28.09.2009) ]]
settings_table = { { -- Edit this table to customise your rings. -- You can create more rings simply by adding more elements to settings_table. -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'. name='time', -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''. arg='%I.%M', -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100. max=12, -- "bg_colour" is the colour of the base ring. bg_colour=0xffffff, -- "bg_alpha" is the alpha value of the base ring. bg_alpha=0.1, -- "fg_colour" is the colour of the indicator part of the ring. fg_colour=0xffffff, -- "fg_alpha" is the alpha value of the indicator part of the ring. fg_alpha=0.5, -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window. x=152, y=270, -- "radius" is the radius of the ring. radius=15, -- "thickness" is the thickness of the ring, centred around the radius. thickness=29, -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative. start_angle=0, -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger (e.g. more clockwise) than start_angle. end_angle=360 }, { name='time', arg='%M.%S', max=60, bg_colour=0xffffff, bg_alpha=0.1, fg_colour=0xffffff, fg_alpha=0.3, x=152, y=270, radius=22, thickness=42, start_angle=0, end_angle=360 }, { name='time', arg='%S', max=60, bg_colour=0xffffff, bg_alpha=0.1, fg_colour=0xffffff, fg_alpha=0.2, x=152, y=270, radius=30, thickness=59, start_angle=0, end_angle=360 }, { name='cpu', arg='cpu0', max=100, bg_colour=0xffffff, bg_alpha=0.3, fg_colour=0xFF4500, fg_alpha=0.6, x=910, y=163, radius=45, thickness=89, start_angle=90, end_angle=270 }, { name='memperc', arg='', max=100, bg_colour=0xffffff, bg_alpha=0.3, fg_colour=0xFF4500, fg_alpha=0.6, x=1100, y=163, radius=45, thickness=89, start_angle=90, end_angle=270 }, { name='time', arg='%d', max=31, bg_colour=0xffffff, bg_alpha=0.1, fg_colour=0xFF4500, fg_alpha=0.4, x=152, y=270, radius=70, thickness=5, start_angle=-60, end_angle=60 }, { name='time', arg='%m', max=12, bg_colour=0xffffff, bg_alpha=0.1, fg_colour=0xFF4500, fg_alpha=0.4, x=152, y=270, radius=70, thickness=5, start_angle=120, end_angle=240 }, { name='fs_used_perc', arg='/', max=150, bg_colour=0xffffff, bg_alpha=0.2, fg_colour=0xFF4500, fg_alpha=0.3, x=960, y=161, radius=20, thickness=37, start_angle=-90, end_angle=90 }, { name='fs_used_perc', arg='/root', max=100, bg_colour=0xffffff, bg_alpha=0.2, fg_colour=0xFF4500, fg_alpha=0.3, x=859, y=161, radius=20, thickness=37, start_angle=-90, end_angle=90 }, { name='fs_used_perc', arg='/home', max=150, bg_colour=0xffffff, bg_alpha=0.2, fg_colour=0xFF4500, fg_alpha=0.3, x=1049, y=161, radius=20, thickness=37, start_angle=-90, end_angle=90 }, }
function draw_ring(cr,t,pt) local w,h=conky_window.width,conky_window.height
local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle'] local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
local angle_0=sa*(2*math.pi/360)-math.pi/2 local angle_f=ea*(2*math.pi/360)-math.pi/2 local t_arc=t*(angle_f-angle_0)
value=tonumber(str) if value == nil then value = 0 end pct=value/pt['max']
draw_ring(cr,pct,pt) 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)
local cr=cairo_create(cs)
local updates=conky_parse('${updates}') update_num=tonumber(updates)
if update_num>5 then for i in pairs(settings_table) do setup_rings(cr,settings_table[i]) end end end
AGARB REGOR
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."
background no font DejaVu Sans Mono:size=10 xftfont DejaVu Sans Mono:size=10 use_xft yes xftalpha 0 update_interval 1.0 total_run_times 0 own_window yes own_window_type override own_window_transparent yes own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager double_buffer yes draw_shades no draw_outline no draw_borders no draw_graph_borders no minimum_size 280 5 maximum_width 280 default_color 696969 default_shade_color black default_outline_color black alignment top_right gap_x 30 gap_y 60 no_buffers yes cpu_avg_samples 2 override_utf8_locale no
TEXT ${offset -7}${font openlogos:size=60}u${font DejaVu Sans Mono:size=10:style=bold} ${voffset -80}${offset 75}${nodename}${font DejaVu Sans Mono:size=10} up $uptime_short ${offset 75}$kernel on $machine ${offset 75}$processes processes ($running_processes) ${offset 75}IP ${execi 14400 wget -O - http://whatismyip.org/ | tail}
${font Mac Dingbats:size=50}h${font DejaVu Sans Mono:size=10:style=bold} ${voffset -68}${offset 75}Resources ${cpugraph 15}${font DejaVu Sans Mono:size=10} ${offset 75}CPU ${cpubar 6 cpu1} ${offset 75}RAM ${membar 6} ${offset 75}SWAP ${swapbar 6}
${voffset -25}${font Mac Dingbats:size=50}x${font DejaVu Sans Mono:size=10:style=bold} ${voffset -50}${offset 75}Top Processes${font DejaVu Sans Mono:size=10}$alignr % ${offset 75}CPU ${top name 1}$alignr${top cpu 1} ${offset 75}RAM ${top_mem name 1}$alignr${top_mem mem 1}
${font Mac Dingbats:size=50}f${font DejaVu Sans Mono:size=10:style=bold} ${voffset -65}${offset 75}Filesystem${font DejaVu Sans Mono:size=10} ${diskiograph 15} ${offset 75}Root ${fs_bar 6 /} ${offset 75}Home ${fs_bar 6 /home}
${voffset 10}${font Mac Dingbats:size=50}c${font DejaVu Sans Mono:size=10:style=bold} ${voffset -60}${offset 75}Network ${font DejaVu Sans Mono:size=10}$alignr${addr eth0} ${offset 75}Up ${upspeedgraph eth0 15} ${offset 75}Down ${downspeedgraph eth0 15}
AGARB REGOR
"Somente seres humanos excepcionais e irrepreensíveis suscitam ideias generosas e ações elevadas. O conhecimento é limitado. A imaginação envolve ao mundo."