Page 1573 of 2348 FirstFirst ... 5731073147315231563157115721573157415751583162316732073 ... LastLast
Results 15,721 to 15,730 of 23480

Thread: Post your .conkyrc files w/ screenshots

  1. #15721
    Join Date
    Nov 2010
    Beans
    5

    Re: Post your .conkyrc files w/ screenshots

    I cleaned up the code a little, added a semi transparent background and a simple total monthly transfer(starts at the first of every month) enjoy.

    Conky:
    Code:
    ## CONKY
    background yes
    out_to_ncurses no
    out_to_console no
    cpu_avg_samples 2
    net_avg_samples 2
    short_units yes
    top_name_width 11
    update_interval 2.0
    no_buffers yes
    imlib_cache_size 0
    
    # TEXT
    uppercase no
    pad_percents 0
    #use_spacer right
    use_xft yes
    xftfont Liberation Sans:size=7
    override_utf8_locale yes
    format_human_readable yes
    text_buffer_size 1024
    
    # WINDOW
    own_window yes
    #own_window_argb_visual yes
    #own_window_argb_value 100
    own_window_transparent yes
    own_window_type override
    #own_window_type normal
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
    
    # GRAPHICS
    double_buffer yes
    draw_borders no
    draw_graph_borders no
    draw_shades yes
    #border_inner_margin 4
    draw_outline no
    
    # LAYOUT
    alignment top_right
    gap_x 10
    gap_y 170
    minimum_size 785
    maximum_width 110
    
    # COLORS
    default_color b2b2b2
    color1 50a950
    color2 bd6e2e
    color3 3490ce
    color4 928f00
    color5 7f7f7f
    
    # LUA-GRAPHBARS
    lua_load ~/conky/bargraph_small.lua
    lua_draw_hook_post main_bars
    
    TEXT
    ${image ~/conky/bg_conky1.png -p 0,0 -s 110x765}
    ${voffset -5}${alignc 8}${font Myriad Pro :Black:size=12}${time %H:%M}$font
    ${alignc}Adam: ${tztime Europe/Paris %H:%M}
    ${alignc}${color 932020}G${color}mail: ${execpi 1800 python ~/conky/gmail.py}
    ${alignc}${color1}${time %B %Y}$color
    ${font Liberation Mono :size=6}${execpi 1800 VinDSL_Cal3= cal | sed '1d' | sed s/^/"\$\{offset 5"\}/ | sed '/^ *$/d' | sed 's/\<'"$(date +%-d)"'\>/${color 932020}&${color}/'}$font
    ${alignc}${color1}Forecast:$color
    ${execpi 1800 conkyForecast --location=USCO0140 --template=~/conky/conkyForecast.template}
    ${voffset -10}${alignc}${color2}Host:$color
    ${alignc}${nodename}
    ${alignc}${color2}System:$color
    ${alignc}${sysname} ${machine}
    ${alignc}${color2}Kernel:$color
    ${alignc}${kernel}
    ${alignc}${color2}Uptime:$color
    ${alignc}$uptime_short
    ${alignc}${color2}Frequency:$color
    ${alignc}$freq_g GHz${color5} - ${hwmon 1 temp 1}°C$color
    ${goto 11}${color2}Core1:$color${alignr 8}${cpu cpu0}%
    
    ${goto 11}${color2}Core2: $color${alignr 8}${cpu cpu1}%
    
    ${goto 11}${color2}Ram: $color${alignr 8}$mem ${color5}/ $memmax$color
    
    ${goto 11}${color2}Swap: $color${alignr 8}$swap ${color5}/ $swapmax$color
    
    ${alignc}${color3}Local IP:$color
    ${alignc}${addr eth0}
    ${alignc}${color3}External IP:$color
    ${alignc}${execi 86400 curl -s http://www.whatismyip.com/automation/n09230945.asp}
    ${alignc}${color3}Total T month:$color
    ${alignc}${execi 1800 vnstat -m | grep "`date +"%b '%y"`" | awk '{print $9}'}${execi 1800 vnstat -m | grep "`date +"%b '%y"`" | awk '{print $10}'}
    ${voffset -4}${alignc 1}${upspeedgraph eth0 23,100 001100 004400 -t}
    ${voffset -29}${goto 11}${color3}Up:$color${alignr 7}${upspeed eth0}
    ${goto 11}${color3}Total:$color${alignr 7}${totalup eth0}
    ${voffset -2}${alignc 1}${downspeedgraph eth0 23,100 110000 440000 -t}
    ${voffset -29}${goto 11}${color3}Down:$color${alignr 7}${downspeed eth0}
    ${goto 11}${color3}Total:$color${alignr 7}${totaldown eth0}
    ${voffset 2}${alignc}${color3}File sys:$color
    ${goto 11}${fs_used /}${color5} / ${fs_size /}${alignr 7}${hddtemp /dev/sda}°C$color
    
    ${alignc}${color3}${if_mounted /media/Downloads}Downloads:$color${else}Drive unmounted...$endif$color
    ${goto 11}${fs_used /media/Downloads}${color5} / ${fs_size /media/Downloads}${alignr 7}${hddtemp /dev/sdb}°C$color
    
    ${alignc}${color4}Top:$color
    ${goto 11}${color4}${top name 1}$color
    ${alignr 7}${top pid 1} ${top cpu 1}
    ${goto 11}${color4}${top name 2}$color
    ${alignr 7}${top pid 2} ${top cpu 2}
    ${goto 11}${color4}${top name 3}$color
    ${alignr 7}${top pid 3} ${top cpu 3}
    ${goto 11}${color4}${top name 4}$color
    ${alignr 7}${top pid 4} ${top cpu 4}
    ${goto 11}${color4}${top name 5}$color
    ${alignr 7}${top pid 5} ${top cpu 5}
    ${voffset -5}
    Conky forecast template:
    Code:
    ${alignc}[--datatype=CT]${image [--datatype=WI] -p 17,136 -s 76x76}
    ${voffset 53}${color1}${alignc}Rain:$color [--datatype=PC --startday=0]
    ${color1}${alignc}Temp:$color [--datatype=HT --centeredwidth=4]
    ${color1}${alignc}Humidity:$color [ --datatype=HM]
    ${color1}${alignc}Sunrise:$color [ --datatype=SR]
    ${color1}${alignc}Sunset:$color [--datatype=SS]
    Bargraph lua:
    Code:
    --[[ 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 = 0
    blocks  - number of blocks to display for a bar (values >0) , default= 10
    height	- height of a block, default=10 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
    ]]
    
    require 'cairo'
    
    ----------------START OF PARAMETERS ----------
    
    
    function conky_main_bars()
    	bars_settings={	
    		{
    			name="cpu",
    			arg="cpu0",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=386,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},
    		{
    			name="cpu",
    			arg="cpu1",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=408,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},
    		{
    			name="memperc",
    			arg="",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=430,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},
    		{
    			name="swapperc",
    			arg="",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=452,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},
    		{
    			name="fs_used_perc",
    			arg="/home",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=600,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},	
    		{
    			name="fs_used_perc",
    			arg="/media/Downloads",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.15},
    			fg_colour={0x00FF00,0.4},
    			alarm_colour={0xFF0000,0.4},
    			x=12,y=633,
    			blocks=33,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.4}}	
    			},	
    	}		
    -------------END OF PARAMETERS--------------
    
    
        
    	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)    
    	--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
    
    		if value==nil then value =0 end
    		
    		pct = 100*value/t.max
    		pcb = 100/t.blocks
    		
    		cairo_set_line_width (cr, t.height)
    		cairo_set_line_cap  (cr, cap)
    		cairo_translate(cr,t.x,t.y)
    		cairo_rotate(cr,t.angle)
    
    		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
    Attached Images Attached Images

  2. #15722
    Join Date
    Oct 2009
    Location
    Under a rock
    Beans
    Hidden!

    Re: Post your .conkyrc files w/ screenshots

    anyone interested in my mayan circles calendar/clock


    here is some better code for it

    cleaned up a little and fixed a couple of errors

    Code:
    --yearclock by mrpeachy 2010 version2
    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 circlewriting(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
    local inum=string.len(text)
    range=finish
    deg=(finish-start)/(inum-1)
    degrads=1*(math.pi/180)
    local textcut=string.gsub(text, ".", "%1@@@")
    texttable=string.split(textcut, "@@@")
    for i = 1,inum do
    ival=i
    interval=(degrads*(start+(deg*(i-1))))+var1
    interval2=degrads*(start+(deg*(i-1)))
    txs=0+radi*(math.sin(interval))
    tys=0-radi*(math.cos(interval))
    cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
    cairo_set_font_size (cr, fsize);
    cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
    cairo_move_to (cr, txs+horiz, tys+verti);
    cairo_rotate (cr, interval2)
    cairo_show_text (cr, (texttable[i]))
    cairo_rotate (cr, -interval2)
    cairo_move_to (cr,0,0)
    cairo_set_source_rgba (cr, 0, 0, 0, 0)
    cairo_line_to (cr,hx0,hy0)
    cairo_stroke (cr)
    end
    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="tenth"
                elseif datetable[2]=="1" then
                dateunit="eleventh"
                elseif datetable[2]=="2" then
                dateunit="twelfth"
                elseif datetable[2]=="3" then
                dateunit="thirteenth"
                elseif datetable[2]=="4" then
                dateunit="fourteenth"
                elseif datetable[2]=="5" then
                dateunit="fifteenth"
                elseif datetable[2]=="6" then
                dateunit="sixteenth"
                elseif datetable[2]=="7" then
                fisrtdigit="seventeenth"
                elseif datetable[2]=="8" then
                dateunit="eighteenth"
                elseif datetable[2]=="9" then
                dateunit="nineteenth"
                end
            end 
              
            if datetable[1]=="0" or datetable[1]>"1" then
                datespacer=" "
                if datetable[1]=="2" then
                datetens="twenty"
                elseif datetable[1]=="3" then
                datetens="thirty"
                elseif datetable[1]=="0" then
                datetens=""
                end 
                if datetable[2]=="1" then
                dateunit="first"
                elseif datetable[2]=="2" then
                dateunit="second"
                elseif datetable[2]=="3" then
                dateunit="third"
                elseif datetable[2]=="4" then
                dateunit="fourth"
                elseif datetable[2]=="5" then
                dateunit="fifth"
                elseif datetable[2]=="6" then
                dateunit="sixth"
                elseif datetable[2]=="7" then
                dateunit="seventh"
                elseif datetable[2]=="8" then
                dateunit="eighth"
                elseif datetable[2]=="9" then
                dateunit="nineth"
                elseif datetable[2]=="0" then
                dateunit=""
                datespacer=""
                end
            end
            if datetable[2]=="0" then
                datetens=""
                datespacer=""
                if datetable[1]=="2" then
                dateunit="twentieth"
                elseif datetable[1]=="3" then
                dateunit="thirtieth"
                end
            end    
        return ((datetens) .. (datespacer) .. (dateunit))
    end--end of function--------------------------------------------------------------------------------------
    
    function number_to_words(text)
    textlength=string.len(text)
    textcut=string.gsub(text, ".", "%1|")
    texttable=string.split(textcut, "|")
    --for NUMBERS from 1 to 999
    --for numbers 1 digit number----------
    if textlength==1 then
        if texttable[1]=="1" then
        firstdigit="one"
        elseif texttable[1]=="2" then
        firstdigit="two"
        elseif texttable[1]=="3" then
        firstdigit="three"
        elseif texttable[1]=="4" then
        firstdigit="four"
        elseif texttable[1]=="5" then
        firstdigit="five"
        elseif texttable[1]=="6" then
        firstdigit="six"
        elseif texttable[1]=="7" then
        firstdigit="seven"
        elseif texttable[1]=="8" then
        firstdigit="eight"
        elseif texttable[1]=="9" then
        firstdigit="nine"
        elseif texttable[1]=="0" then
        firstdigit="zero"
        end
    return firstdigit
    end
    --for 2 digit number------------------
    if textlength==2 then
        if texttable[1]=="1" then
            seconddigit=""
            spacer=""
            if texttable[2]=="0" then
            firstdigit="ten"
            elseif texttable[2]=="1" then
            firstdigit="eleven"
            elseif texttable[2]=="2" then
            firstdigit="twelve"
            elseif texttable[2]=="3" then
            firstdigit="thirteen"
            elseif texttable[2]=="4" then
            firstdigit="fourteen"
            elseif texttable[2]=="5" then
            firstdigit="fifteen"
            elseif texttable[2]=="6" then
            firstdigit="sixteen"
            elseif texttable[2]=="7" then
            fisrtdigit="seventeen"
            elseif texttable[2]=="8" then
            firstdigit="eighteen"
            elseif texttable[2]=="9" then
            firstdigit="nineteen"
            end
        end   
        if texttable[1]>"1" then
            spacer=" "
            if texttable[1]=="2" then
            seconddigit="twenty"
            elseif texttable[1]=="3" then
            seconddigit="thirty"
            elseif texttable[1]=="4" then
            seconddigit="fourty"
            elseif texttable[1]=="5" then
            seconddigit="fifty"
            elseif texttable[1]=="6" then
            seconddigit="sixty"
            elseif texttable[1]=="7" then
            seconddigit="seventy"
            elseif texttable[1]=="8" then
            seconddigit="eighty"
            elseif texttable[1]=="9" then
            seconddigit="ninety"
            end    
            if texttable[2]=="1" then
            firstdigit="one"
            elseif texttable[2]=="2" then
            firstdigit="two"
            elseif texttable[2]=="3" then
            firstdigit="three"
            elseif texttable[2]=="4" then
            firstdigit="four"
            elseif texttable[2]=="5" then
            firstdigit="five"
            elseif texttable[2]=="6" then
            firstdigit="six"
            elseif texttable[2]=="7" then
            firstdigit="seven"
            elseif texttable[2]=="8" then
            firstdigit="eight"
            elseif texttable[2]=="9" then
            firstdigit="nine"
            elseif texttable[2]=="0" then
            firstdigit=""
            spacer=""
            end
         end
    return ((seconddigit) .. (spacer) .. (firstdigit))
    end
    --for 3 digit numbers-----------------------------
    if textlength==3 then
        if texttable[2]=="0" and texttable[3]=="0" then space="" end
        if texttable[2]>"0" or texttable[3]>"0" then space=" and " end
        if texttable[2]=="0" and texttable[3]>"0" then spacer="" end
        
        if texttable[1]=="1" then
        thirddigit="one hundred"
        elseif texttable[1]=="2" then
        thirddigit="two hundred"
        elseif texttable[1]=="3" then
        thirddigit="three hundred"
        elseif texttable[1]=="4" then
        thirddigit="four hundred"
        elseif texttable[1]=="5" then
        thirddigit="five hundred"
        elseif texttable[1]=="6" then
        thirddigit="six hundred"
        elseif texttable[1]=="7" then
        thirddigit="seven hundred"
        elseif texttable[1]=="8" then
        thirddigit="eight hundred"
        elseif texttable[1]=="9" then
        thirddigit="nine hundred"
        end
        if texttable[2]=="0" or texttable[2]>"1" then
            if texttable[3]=="1" then
            firstdigit="one"
            elseif texttable[3]=="2" then
            firstdigit="two"
            elseif texttable[3]=="3" then
            firstdigit="three"
            elseif texttable[3]=="4" then
            firstdigit="four"
            elseif texttable[3]=="5" then
            firstdigit="five"
            elseif texttable[3]=="6" then
            firstdigit="six"
            elseif texttable[3]=="7" then
            firstdigit="seven"
            elseif texttable[3]=="8" then
            firstdigit="eight"
            elseif texttable[3]=="9" then
            firstdigit="nine"
            elseif texttable[3]=="0" then
            firstdigit=""
            spacer=""
            end 
        end
        if texttable[2]=="1" then
            seconddigit=""
            spacer=""  
            if texttable[3]=="0" then
            firstdigit="ten"
            elseif texttable[3]=="1" then
            firstdigit="eleven"
            elseif texttable[3]=="2" then
            firstdigit="twelve"
            elseif texttable[3]=="3" then
            firstdigit="thirteen"
            elseif texttable[3]=="4" then
            firstdigit="fourteen"
            elseif texttable[3]=="5" then
            firstdigit="fifteen"
            elseif texttable[3]=="6" then
            firstdigit="sixteen"
            elseif texttable[3]=="7" then
            firstdigit="seventeen"
            elseif texttable[3]=="8" then
            firstdigit="eighteen"
            elseif texttable[3]=="9" then
            firstdigit="nineteen"
            end
        end
        if texttable[2] >"1" then
            spacer=" "    
            if texttable[2]=="2" then
            seconddigit="twenty"
            elseif texttable[2]=="3" then
            seconddigit="thirty"
            elseif texttable[2]=="4" then
            seconddigit="fourty"
            elseif texttable[2]=="5" then
            seconddigit="fifty"
            elseif texttable[2]=="6" then
            seconddigit="sixty"
            elseif texttable[2]=="7" then
            seconddigit="seventy"
            elseif texttable[2]=="8" then
            seconddigit="eighty"
            elseif texttable[2]=="9" then
            seconddigit="ninety"
            elseif texttable[2]=="0" then
            seconddigit=""
            end
        end
    return ((thirddigit) .. (space) .. (seconddigit) .. (spacer) .. (firstdigit))
    end
    end--of function
    
    function conky_draw_fig()
    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
    
    cairo_set_line_width (cr,1)
    hx0=200
    hy0=200
    radius=40
    
    --months of the year---------------------------------------------------------------------------------------------------
    mnrad1=radius
    mnrad2=mnrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,mnrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,mnrad2,0,2*math.pi)
    cairo_stroke (cr)
    --calculations
    year4num=os.date("%Y")
    t1 = os.time( {    year=year4num,month=03,day=01,hour=00,min=0,sec=0} );
    t2 = os.time( {    year=year4num,month=02,day=01,hour=00,min=0,sec=0} );
    febdaynum=tonumber((os.difftime(t1,t2))/(24*60*60))
    yeardays=31+febdaynum+31+30+31+30+31+31+30+31+30+31
    yearsec=(yeardays*24*60*60)
    jan=31*24*60*60
    feb=jan+(febdaynum*24*60*60)
    mar=feb+(31*24*60*60)
    apr=mar+(30*24*60*60)
    may=apr+(31*24*60*60)
    jun=may+(30*24*60*60)
    jul=jun+(31*24*60*60)
    aug=jul+(31*24*60*60)
    sep=aug+(30*24*60*60)
    oct=sep+(31*24*60*60)
    nov=oct+(30*24*60*60)
    dec=nov+(31*24*60*60)
    secdays = { jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec }
    --circle indicator lines
    for i=1,12 do
    arc=((2*math.pi/360)*((360/yearsec)*(secdays[i])))
    mnx1=0+mnrad1*(math.sin(arc))
    mny1=0-mnrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/yearsec)*(secdays[i])))
    mnx2=0+mnrad2*(math.sin(arc))
    mny2=0-mnrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx2,hy0+mny2)
    cairo_stroke (cr)
    end
    --indicator
    doy=tonumber(os.date("%j"))
    yrsecs=((doy-1)*24*60*60)+(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    mnrad3=mnrad2+10
    arc=(2*math.pi/360)*((360/yearsec)*(yrsecs))
    mnx1=0+mnrad2*(math.sin(arc))
    mny1=0-mnrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/yearsec)*((yrsecs))+4)
    mnx2=0+mnrad3*(math.sin(arc))
    mny2=0-mnrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/yearsec)*((yrsecs))-4)
    mnx3=0+mnrad3*(math.sin(arc))
    mny3=0-mnrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx2,hy0+mny2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx3,hy0+mny3)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    text1=((string.upper(os.date('%B'))) .. " TWO THOUSAND AND " .. string.upper(number_to_words(os.date('%y'))))
    --text must be in quotes
    text=text1
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=mnrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/yearsec)*((yrsecs))+4)
    slen2=string.len(text)
    finish=start+270
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of months around year-------------------------------------------------------------------------------------------------------------------------------
    
    --days around month----------------------------------------------------------------------
    drad1=mnrad3
    drad2=drad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,drad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,drad2,0,2*math.pi)
    cairo_stroke (cr)
    --calculations
    monthnum=(tonumber(os.date('%m')))
    monthdays = { 31, febdaynum, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
    --drawin circle indicator lines
    for i=1,monthdays[monthnum] do
    arc=((2*math.pi/360)*((360/monthdays[monthnum])*(i)))
    dx1=0+drad1*(math.sin(arc))
    dy1=0-drad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/monthdays[monthnum])*(i)))
    dx2=0+drad2*(math.sin(arc))
    dy2=0-drad2*(math.cos(arc))
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx2,hy0+dy2)
    cairo_stroke (cr)
    end
    --indicator
    daynumsec=(tonumber(os.date('%d'))*24*60*60)+(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    monthnumsec=(monthdays[monthnum])*24*60*60
    drad3=drad2+10
    arc=(2*math.pi/360)*((360/monthnumsec)*(daynumsec))
    dx1=0+drad2*(math.sin(arc))
    dy1=0-drad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/monthnumsec)*((daynumsec))+4)
    dx2=0+drad3*(math.sin(arc))
    dy2=0-drad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/monthnumsec)*((daynumsec))-4)
    dx3=0+drad3*(math.sin(arc))
    dy3=0-drad3*(math.cos(arc))
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx2,hy0+dy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx3,hy0+dy3)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    text1=((string.upper(os.date('%A'))) .. " THE " .. string.upper(date_to_words()))
    --text must be in quotes
    text=text1
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=drad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/monthnumsec)*(daynumsec)+4)
    slen1=string.len(text)
    finish=start+(7.5*slen1)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of days around month-------------------------------------------------------------------------------------------------------
    
    --hours around day ---------------------------------------------------------------------------------------------------------------------
    hrad1=drad3
    hrad2=hrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw eings
    cairo_arc (cr,hx0,hy0,hrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,hrad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw ring indicator lines
    for i=1,24 do
    arc=((2*math.pi/360)*((360/24)*i))
    hx1=0+hrad1*(math.sin(arc))
    hy1=0-hrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/24)*i))
    hx2=0+hrad2*(math.sin(arc))
    hy2=0-hrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx2,hy0+hy2)
    cairo_stroke (cr)
    end
    --indicator
    hrsec=(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    --mns=mn+sc
    hrad3=hrad2+10
    arc=((2*math.pi/360)*((360/(24*60*60)*hrsec)))
    hx1=0+hrad2*(math.sin(arc))
    hy1=0-hrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(24*60*60))*(hrsec)-4)
    hx2=0+hrad3*(math.sin(arc))
    hy2=0-hrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(24*60*60))*(hrsec)+4)
    hx3=0+hrad3*(math.sin(arc))
    hy3=0-hrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx2,hy0+hy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx3,hy0+hy3)
    cairo_stroke (cr)
    --circlewriting
    hrnum=tonumber(os.date('%H'))
    if hrnum==1 then hour="HOUR"
    else hour="HOURS" end
    text4=((string.upper(number_to_words(hrnum))) .. " " .. hour)
    --text must be in quotes
    text=text4
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=hrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/(24*60*60))*(hrsec)+4)
    slen4=string.len(text)
    finish=start+(slen4*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of hours around day----------------------------------------------------------------------------------------------------
    
    --minutes around hour--------------------------------------------------------------------------------------------------------------
    mrad1=hrad3
    mrad2=mrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,mrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,mrad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw circle indicator lines
    for i=1,60 do
    arc=((2*math.pi/360)*((360/60)*i))
    mx1=0+mrad1*(math.sin(arc))
    my1=0-mrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/60)*i))
    mx2=0+mrad2*(math.sin(arc))
    my2=0-mrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx2,hy0+my2)
    cairo_stroke (cr)
    end
    --indicator
    minsec=(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    mrad3=mrad2+10
    arc=((2*math.pi/360)*((360/(60*60)*minsec)))
    mx1=0+mrad2*(math.sin(arc))
    my1=0-mrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(60*60))*(minsec)-4)
    mx2=0+mrad3*(math.sin(arc))
    my2=0-mrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(60*60))*(minsec)+4)
    mx3=0+mrad3*(math.sin(arc))
    my3=0-mrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx2,hy0+my2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx3,hy0+my3)
    cairo_stroke (cr)
    --circlewriting
    min=tonumber(os.date('%M'))
    if min==1 then minute="MINUTE"
    else minute="MINUTES" end
    text4=((string.upper(number_to_words(min))) .. " " .. minute)
    --text must be in quotes
    text=text4
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=mrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/(60*60))*(minsec)+4)
    slen4=string.len(text)
    finish=start+(slen4*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end minutes around hour--------------------------------------------------------------------------------------
    
    --seconds of minute-------------------------------------------------------------------------------------------
    srad1=mrad3
    srad2=srad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,srad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,srad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw circle indicator lines
    for i=1,60 do
    arc=((2*math.pi/360)*((360/60)*i))
    sx1=0+srad1*(math.sin(arc))
    sy1=0-srad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/60)*i))
    sx2=0+srad2*(math.sin(arc))
    sy2=0-srad2*(math.cos(arc))
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx2,hy0+sy2)
    cairo_stroke (cr)
    end
    --indicator
    sec=(tonumber(os.date('%S')))
    srad3=srad2+10
    arc=((2*math.pi/360)*((360/(60)*sec)))
    sx1=0+srad2*(math.sin(arc))
    sy1=0-srad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/60)*((sec))-4)
    sx2=0+srad3*(math.sin(arc))
    sy2=0-srad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/60)*((sec))+4)
    sx3=0+srad3*(math.sin(arc))
    sy3=0-srad3*(math.cos(arc))
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx2,hy0+sy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx3,hy0+sy3)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,srad3,0,2*math.pi)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    sec=tonumber(os.date('%S'))
    if sec==1 then second="SECOND"
    else second="SECONDS" end
    text3=((string.upper(number_to_words(sec))) .. " " .. second)
    --text must be in quotes
    text=text3
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=srad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/60)*((sec))+4)
    slen3=string.len(text)
    finish=start+(slen3*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end seconds of minute-----------------------------------------------------------------------------------------------------------------------------
    --end of calendar---------------------------------------------------------------------------------------------------
    end--of if updates>5
    end--of main function
    call it in conky
    Code:
    lua_load /path/to/file/filename.lua
    lua_draw_hook_pre draw_fig
    Last edited by mrpeachy; January 5th, 2011 at 07:11 AM.

  3. #15723
    Join Date
    Feb 2010
    Location
    QLD, Australia
    Beans
    497
    Distro
    Kubuntu 12.04 Precise Pangolin

    Re: Post your .conkyrc files w/ screenshots

    Vindsl, that one that I based off your's, well I copied it to my laptop along with all the fonts but the background isn't showing up correctly, its just black, not transparent and the corners aren't rounded. almost like the lua script isn't working but its in the exact same place and set up the same. I can't work out why. Any ideas?

    Also to who ever it was that suggested using vnstat on a shared data base to get the total data usage between all comps, that wouldn't work as my wifes laptop is Win XP (haven't been able to convince her to change yet).
    Ubuntu 16.04 / Linux 18
    “To mess up a Linux box, you need to work at it; to mess up your Windows
    box, you just need to work on it”.

  4. #15724
    Join Date
    Apr 2007
    Beans
    195

    Re: Post your .conkyrc files w/ screenshots

    Quote Originally Posted by Jonny87 View Post
    Vindsl, that one that I based off your's, well I copied it to my laptop along with all the fonts but the background isn't showing up correctly, its just black, not transparent and the corners aren't rounded. almost like the lua script isn't working but its in the exact same place and set up the same. I can't work out why. Any ideas?

    Also to who ever it was that suggested using vnstat on a shared data base to get the total data usage between all comps, that wouldn't work as my wifes laptop is Win XP (haven't been able to convince her to change yet).
    Well, then unless your ISP has a specific URL you can go to to get the exact usage, I don't think you'll be able to track it. Ask them though. No use giving up for nothing. Tell them you want to use Linux to monitor the number using the curl command. The fun part will be how many seconds of silence will be on the other end of the phone

    I'm voting 5 to 10 seconds. Any Takers? Bets? Nothing?

    With the script thing, is it the same user name on both? You'd be surprised how often little things like that just slip our minds. If all else fails, just make sure you're using the ~/path/to/script rather than /home/user/path/to/script. If all else fails, tell us the difference in stats between the two. Maybe there's something there. I don't want to assume anything, and I've been doing tech support most of my life. A lot of this sounds patronizing, and I don't mean it that way. It's just old habits.

  5. #15725
    Join Date
    Jul 2010
    Location
    Ubuntu Land
    Beans
    53
    Distro
    Ubuntu 12.10 Quantal Quetzal

    Re: Post your .conkyrc files w/ screenshots

    Man you folks have got me hooked..

    I was getting ready for bed when I remembered I had a bargraph.lua I wanted to add to my conky.

    So anyway here it is.


    conkyrc
    Code:
    ##################################
    ## VinDSL | rev. 10-12-30 20:45 ##
    ##################################
    
    ####
    ## Use XFT? Required to Force UTF8 (see below).
    #
    use_xft yes
    xftfont LiberationSans:size=8.85
    xftalpha 0.7
    text_buffer_size 2048
    
    ####
    ## Force UTF8? Requires XFT (see above).
    ## Displays degree symbol, instead of °, etc.
    #
    override_utf8_locale yes
    
    ####
    ## Update interval in seconds.
    #
    update_interval 1.5
    
    ####
    ## This is the number of times Conky will update before quitting.
    ## Set to zero to run forever.
    #
    total_run_times 0
    
    ####
    ## Create own window instead of using desktop (required in nautilus)?
    #
    own_window yes
    own_window_colour eeeeee
    own_window_type override
    own_window_transparent yes
    
    ####
    ## Use double buffering? Reduces flicker.
    #
    double_buffer yes
    
    ####
    ## Draw shades?
    #
    draw_shades no
    
    ####
    ## Draw outlines?
    #
    draw_outline no
    
    ####
    ## Draw borders around text?
    #
    draw_borders no
    
    ####
    ## Draw borders around graphs?
    #
    draw_graph_borders no
    
    ####
    ## Print text to stdout?
    ## Print text in console?
    #
    out_to_ncurses no
    out_to_console no
    
    ####
    ## Text alignment.
    #
    alignment top_left
    
    ####
    ## Minimum size of text area.
    #
    minimum_size 150 0
    
    ####
    ## Gap between text and screen borders.
    #
    gap_x 8
    gap_y 44
    
    ####
    ## Shorten MiB/GiB to M/G in stats.
    #
    short_units yes
    
    ####
    ## Pad % symbol spacing after numbers.
    #
    pad_percents 0
    
    ####
    ## Pad spacing between text and borders.
    #
    border_inner_margin 4
    
    ####
    ## Limit the length of names in "Top Processes".
    #
    top_name_width 10
    
    ####
    ## Subtract file system -/+buffers/cache from used memory?
    ## Set to yes, to produce meaningful physical memory stats.
    #
    no_buffers yes
    
    ####
    ## Set to yes, if you want all text to be in UPPERCASE.
    #
    uppercase no
    
    ####
    ## Number of cpu samples to average.
    ## Set to 1 to disable averaging.
    #
    cpu_avg_samples 2
    
    ####
    ## Number of net samples to average.
    ## Set to 1 to disable averaging.
    #
    net_avg_samples 2
    
    ####
    ## Add spaces to keep things from moving around?
    ## Only affects certain objects.
    #
    use_spacer left
    
    ####
    ## My colors (suit yourself).
    #
    color0 White
    color1 Ivory
    color2 Ivory2
    color3 Ivory3
    color4 Tan1
    color5 Tan2
    color6 Gray
    color7 AntiqueWhite4
    color8 DarkSlateGray
    color9 Black
    
    ####
    ## Load Lua for shading (optional).
    ## Set the path to your script here.
    
    lua_load /home/linus/scripts/.draw_bg.lua
    lua_load /home/linus/scripts/.bargraph_small.lua
    lua_draw_hook_pre draw_bg
    lua_draw_hook_post main_bars
    
    
    ####
    ## Installed fonts (required).
    #
    # ConkyWeather (Stanko Metodiev)
    # ConkyWindNESW (Stanko Metodiev)
    # Cut Outs for 3D FX (Fonts & Things)
    # Liberation Mono (Ascender Corp)
    # Liberation Sans (Ascender Corp)
    # Moon Phases (Curtis Clark)
    # OpenLogos (Icoma)
    # PizzaDude Bullets (Jakob Fischer)
    # Radio Space (Iconian Fonts)
    # StyleBats (Vinterstille)
    # Ubuntu (Canonical Ltd)
    # Ubuntu Title Bold (Paulo Silva)
    # Weather (Jonathan Macagba)
    # WenQuanYi Micro Hei (Google Corp)
    
    TEXT
    ##################
    ##     LOGO     ##
    ##################
    ${voffset -33}${font OpenLogos:size=103}${color2}v${font}${voffset -76}${goto 178}${font UbuntuTitleBold:size=20}${color4}10.04${font}
    ##################
    ##    SYSTEM    ##
    ##################
    ${voffset 20}${font WenQuanYiMicroHei:bold:size=8.75}${color4}SYSTEM${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font OpenLogos:size=10}${color2}u${voffset -4}${font}${color6}${offset 5}${sysname}${offset 5}${kernel}${alignr}${machine}
    ${voffset 2}${font StyleBats:size=10}${color2}A${voffset -1}${font}${color6}${offset 5}Intel${offset 3}Celeron${offset 3}M${alignr}${freq_g cpu0}${offset 1}GHz
    ${voffset 2}${font StyleBats:size=10}${color2}q${voffset -1}${font}${color6}${offset 5}Uptime${alignr}${uptime}
    ${voffset 2}${font StyleBats:size=10}${color2}o${voffset -1}${font}${color6}${offset 5}File${offset 3}System${alignr}${fs_type}
    ${voffset 2}${font StyleBats:size=10}${color2}o${voffset -15}${font}${color6}
    ${offset 16}Gmail${alignr}${execpi 1800 python /home/linus/scripts/gmail.py}
    ##################
    ##  PROCESSOR  ##
    ##################
    ${voffset 6}${font WenQuanYiMicroHei:bold:size=8.75}${color4}PROCESSOR${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font StyleBats:size=10}${color2}k${voffset -2}${font}${color6}${offset 2}CPU${offset 5}${cpu cpu}%${color7}
    ##################
    ##    MEMORY    ##
    ##################
    ${voffset 6}${font WenQuanYiMicroHei:bold:size=8.75}${color4}MEMORY${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font StyleBats:size=10}${color2}l${voffset -2}${font}${color6}${offset 3}RAM${goto 97}${mem}${goto 133}/${offset 5}${memmax}${alignr}${memperc}%
    ${color7}${alignr 2}
    ##################
    ##     HDD      ##
    ##################
    ${voffset 2}${font WenQuanYiMicroHei:bold:size=8.75}${color4}HDD${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font StyleBats:size=10}${color2}x${voffset -2}${font}${color6}${offset 4}BOOT${goto 95}${fs_used /boot}${goto 133}/${offset 5}${fs_size /boot}${alignr}${fs_free_perc /boot}%
    ${color7}${alignr 2}
    ${voffset 4}${font StyleBats:size=10}${color2}x${voffset -2}${font}${color6}${offset 4}ROOT${goto 95}${fs_used /}${goto 133}/${offset 5}${fs_size /}${alignr}${fs_free_perc /}%
    ${color7}${alignr 2}
    ${voffset 1}${font StyleBats:size=10}${color2}x${voffset -2}${font}${color6}${offset 4}HOME${goto 95}${fs_used /home}${goto 133}/${offset 5}${fs_size /home}${alignr}${fs_free_perc /home}%
    ${color7}${alignr 2}
    ${voffset 1}${font StyleBats:size=10}${color2}4${voffset -2}${font}${color6}${offset 4}SWAP${goto 95}${swap}${goto 133}/${offset 5}${swapmax}${alignr}${swapperc}%
    ${color7}${alignr 2}
    ##################
    # TOP PROCESSES ##
    ##################
    ${voffset 3}${font WenQuanYiMicroHei:bold:size=8.75}${color4}TOP PROCESSES${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font StyleBats:size=10}${color1}h${voffset -3}${font}${color6}${offset 5}${top_mem name 1}${goto 115}${top_mem mem_res 1}${alignr}${top_mem mem 1}%
    ${voffset 2}${font StyleBats:size=10}${color1}h${voffset -3}${font}${color6}${offset 5}${top_mem name 2}${goto 115}${top_mem mem_res 2}${alignr}${top_mem mem 2}%
    ${voffset 2}${font StyleBats:size=10}${color1}h${voffset -3}${font}${color6}${offset 5}${top_mem name 3}${goto 115}${top_mem mem_res 3}${alignr}${top_mem mem 3}%
    ${voffset 2}${font StyleBats:size=10}${color1}h${voffset -3}${font}${color6}${offset 5}${top_mem name 4}${goto 115}${top_mem mem_res 4}${alignr}${top_mem mem 4}%
    ${voffset 2}${font StyleBats:size=10}${color1}h${voffset -3}${font}${color6}${offset 5}${top_mem name 5}${goto 115}${top_mem mem_res 5}${alignr}${top_mem mem 5}%
    ##################
    ##   NETWORK    ##
    ##################
    ${voffset 6}${font WenQuanYiMicroHei:bold:size=8.75}${color4}NETWORK${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 4}${font PizzaDudeBullets:size=10}${color2}a${font}${color6}${offset 5}Private${offset 3}IP${alignr}${addr wlan0}
    ${font PizzaDudeBullets:size=10}${color2}a${font}${color6}${offset 5}Public${offset 7}IP${alignr}${execi 1800 wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'}
    ${voffset 4}${font PizzaDudeBullets:size=10}${color2}T${font}${color6}${offset 5}Down${alignr}${downspeed wlan0}
    ${font PizzaDudeBullets:size=10}${color2}N${font}${color6}${offset 5}Up${alignr}${upspeed wlan0}
    ${voffset 4}${font PizzaDudeBullets:size=10}${color2}T${font}${color6}${offset 5}Downloaded${alignr}${totaldown wlan0}
    ${font PizzaDudeBullets:size=10}${color2}N${font}${color6}${offset 5}Uploaded${alignr}${totalup wlan0}
    ##################
    ##     TIME     ##
    ##################
    ${voffset 6}${font WenQuanYiMicroHei:bold:size=8.75}${color4}TIME${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 3}${if_match ${time %l}<=9}${voffset -4}${font RadioSpace:size=22}${color3}${alignc 7}${time %l:%M%p}${font}${else}${if_match ${time %l}>=10}${voffset -4}${font RadioSpace:size=22}${color3}${alignc -1}${time %l:%M%p}${font}${endif}${endif}
    ${voffset 0}${font LiberationSans:size=8}${color4}${alignc 2}Sunrise${offset 1}${execi 1800 conkyForecast --location=USAL0162 --datatype=SR --startday=1}${color3}${offset 2}|${offset 2}${color4}Sunset${offset 1}${execi 1800 conkyForecast --location=USAL0162 --datatype=SS --startday=1}${font}
    ##################
    ##   CALENDAR   ##
    ##################
    ${voffset 6}${font WenQuanYiMicroHei:bold:size=8.75}${color4}DATE${offset 8}${color8}${voffset -2}${hr 2}${font}
    ${voffset 18}${font LiberationMono:size=8}${color3}${alignc 60}${time %A}${font}
    ${voffset -3}${if_match ${time %e}<=9}${font LiberationMono:size=22}${color4}${alignc 70}${time %e}${font}${else}${if_match ${time %e}>=10}${font LiberationMono:size=22}${color4}${alignc 60}${time %e}${font}${endif}${endif}
    ${voffset -1}${font LiberationMono:size=8}${color3}${alignc 60}${time %B}${font}
    ${voffset -3}${font LiberationMono:size=8}${color3}${alignc 60}${time %Y}${font}
    ${voffset -82}${font LiberationMono:size=8}${color3}${execpi 1800 VinDSL_Cal_4= cal | sed '1d' | sed s/^/"\$\{offset 107"\}/ | sed '/^ *$/d' | sed 's/\<'"$(date +%-d)"'\>/${color4}&${color3}/'}${font}
    ${voffset -90}${font CutOutsFor3DFX:size=64}${color8}${alignc 99}2${font}
    bargraph.lua
    Credit blegblath,his .lua I just changed x= y=,blocks,width.
    Code:
    --[[ 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 = 0
    blocks  - number of blocks to display for a bar (values >0) , default= 10
    height	- height of a block, default=10 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
    ]]
    
    require 'cairo'
    
    ----------------START OF PARAMETERS ----------
    
    
    function conky_main_bars()
    	bars_settings={	
    		{
    			name="cpu",
    			arg="cpu0",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=108,y=171,
    			blocks=52,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},
    		{
    			
    		        name="memperc",
    			arg="",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=31,y=219,
    			blocks=77,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},
    		{
    			
                            name="fs_used_perc",
    			arg="/boot",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=31,y=263,
    			blocks=77,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},	
    		{
    			name="fs_used_perc",
    			arg="/root",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=31,y=293,
    			blocks=77,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},	
    		{
    			name="fs_used_perc",
    			arg="/home",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=31,y=320,
    			blocks=77,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},	
    	        {
                            name="swapperc",
    			arg="",
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=31,y=347,
    			blocks=77,
    			space=1,
    			height=2,width=7,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},
    	 }		
    -------------END OF PARAMETERS--------------
    
    
        
    	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)    
    	--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
    
    		if value==nil then value =0 end
    		
    		pct = 100*value/t.max
    		pcb = 100/t.blocks
    		
    		cairo_set_line_width (cr, t.height)
    		cairo_set_line_cap  (cr, cap)
    		cairo_translate(cr,t.x,t.y)
    		cairo_rotate(cr,t.angle)
    
    		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
    Attached Images Attached Images
    Last edited by foutes; January 5th, 2011 at 10:28 AM. Reason: giving credit where credit is due
    Eee Pc 1215N notebook-12in Screen-Ubnutu 12.10
    Dual core 1.8 Atom
    2 gig DDR3
    Nvidia Ion(Yes it works,even have HDMI out working)

  6. #15726
    Join Date
    Jul 2010
    Location
    Ubuntu Land
    Beans
    53
    Distro
    Ubuntu 12.10 Quantal Quetzal

    Re: Post your .conkyrc files w/ screenshots

    Quote Originally Posted by Jonny87 View Post
    Vindsl, that one that I based off your's, well I copied it to my laptop along with all the fonts but the background isn't showing up correctly, its just black, not transparent and the corners aren't rounded. almost like the lua script isn't working but its in the exact same place and set up the same. I can't work out why. Any ideas?

    Also to who ever it was that suggested using vnstat on a shared data base to get the total data usage between all comps, that wouldn't work as my wifes laptop is Win XP (haven't been able to convince her to change yet).
    I had to play around with the size in the .lua in order for it to show correctly on my laptop.Go back a page or two and copy the .lua from my post and see if it will work for you.If not you can open the .lua and play with the size,the instructions are at the top of the .lua.
    Eee Pc 1215N notebook-12in Screen-Ubnutu 12.10
    Dual core 1.8 Atom
    2 gig DDR3
    Nvidia Ion(Yes it works,even have HDMI out working)

  7. #15727
    Join Date
    Jul 2010
    Location
    Ubuntu Land
    Beans
    53
    Distro
    Ubuntu 12.10 Quantal Quetzal

    Re: Post your .conkyrc files w/ screenshots

    Ok,last time tonight I promise.

    Added bargraph to conkyrhythmbox.

    .bargraph_small2.lua
    Code:
    --[[ 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 = 0
    blocks  - number of blocks to display for a bar (values >0) , default= 10
    height	- height of a block, default=10 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
    ]]
    
    require 'cairo'
    
    ----------------START OF PARAMETERS ----------
    
    
    function conky_main_bars()
    	bars_settings={	
    		{
    			name="",
    			arg=io.popen("conkyRhythmbox --datatype=PP"):read(),
    			max=100,
    			alarm=50,
    			bg_colour={0xFFFFFF,0.25},
    			fg_colour={0x00FF00,0.6},
    			alarm_colour={0xFF0000,0.6},
    			x=9,y=295,
    			blocks=80,
    			space=1,
    			height=2,width=8,
    			angle=90,
    			smooth=true,
    			mid_colour={{0.5,0xFFFF00,0.6}}	
    			},
    	 }		
    -------------END OF PARAMETERS--------------
    
    
        
    	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)    
    	--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
    
    		if value==nil then value =0 end
    		
    		pct = 100*value/t.max
    		pcb = 100/t.blocks
    		
    		cairo_set_line_width (cr, t.height)
    		cairo_set_line_cap  (cr, cap)
    		cairo_translate(cr,t.x,t.y)
    		cairo_rotate(cr,t.angle)
    
    		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
    conkyrhythmbox template
    Code:
    ${color #656565}
    ${color3}Status:${color1}[--datatype=ST]
    ${color3}Artist:${color1}[--datatype=AR]
    ${color3}Album:${color1}[--datatype=AL]
    ${color3}Title:${color1}[--datatype=TI]
    ${color3}Volume:${color1}[--datatype=VO]
    Added this to template and now have album art.New screen shot to show output.
    Code:
    ${image [--datatype=CA] -n -p 60,380 -s 125x125}
    Attached Images Attached Images
    Last edited by foutes; January 5th, 2011 at 02:48 PM.
    Eee Pc 1215N notebook-12in Screen-Ubnutu 12.10
    Dual core 1.8 Atom
    2 gig DDR3
    Nvidia Ion(Yes it works,even have HDMI out working)

  8. #15728
    Join Date
    Oct 2008
    Location
    India
    Beans
    Hidden!
    Distro
    Ubuntu 10.10 Maverick Meerkat

    Re: Post your .conkyrc files w/ screenshots

    using rgba on lua rings, python calendar and conky-colors mod
    basically:-
    #############################
    # - Window specifications - #
    #############################
    own_window_class Conky
    own_window yes
    own_window_type normal
    own_window_transparent no
    own_window_hints undecorated,above,sticky,skip_taskbar,skip_pager
    own_window_argb_visual yes
    own_window_argb_value 0
    own_window_colour black
    Attached Images Attached Images
    Last edited by gauravj; January 5th, 2011 at 06:25 PM.
    Maverick | AMD 64 | HP dv9000 | Gnome
    "My religion consists of a humble admiration of the illimitable superior spirit who reveals himself in the slight details we are able to perceive with our frail and feeble mind."

  9. #15729
    Join Date
    Sep 2007
    Beans
    Hidden!

    Re: Post your .conkyrc files w/ screenshots

    Quote Originally Posted by Jonny87 View Post
    Vindsl, that one that I based off your's, well I copied it to my laptop along with all the fonts but the background isn't showing up correctly, its just black, not transparent and the corners aren't rounded. almost like the lua script isn't working but its in the exact same place and set up the same. I can't work out why. Any ideas?

    Also to who ever it was that suggested using vnstat on a shared data base to get the total data usage between all comps, that wouldn't work as my wifes laptop is Win XP (haven't been able to convince her to change yet).
    You may have to attempt what dk75 proposed and go with a program other than vnstat.
    The mark of an honest man ... is that he means what he says and knows what he means.
    A.R.

  10. #15730
    Join Date
    Dec 2008
    Location
    The Desert
    Beans
    281
    Distro
    Ubuntu 12.04 Precise Pangolin

    Re: Post your .conkyrc files w/ screenshots

    Quote Originally Posted by 42dorian View Post
    ...Here's an interesting challenge inspired by the TV Listings issue...

    I usually keep a spreadsheet with my weekly TV schedule. Can Conky display spreadsheet data, or just text files? Could it, say, search for a column and time in a spreadsheet to display a block of data that is also colour coded?

    Wacky, wacky ideas going through my head... I'm a Conky Sadist at this point
    I know I have seen one somewhere but I just can't find it. I think it used to be up on the old conky hardcore site.
    Quote Originally Posted by foutes View Post
    My next project is Xbox live friends status in conky.The script found below need some work still before it can be used though.
    http://ubuntuforums.org/showthread.php?t=1642924
    Its quite an annoying thing that microsoft did in changing there site. Before they changed the site I could get my top 5 friends who were online and what they were playing. But Microsoft got rid of the Friends.aspx which is very annoying. If you can add anything to the script to maybe show the top 5 like the old script that would be awesome.
    Quote Originally Posted by mrpeachy View Post
    anyone interested in my mayan circles calendar/clock


    here is some better code for it

    cleaned up a little and fixed a couple of errors

    Code:
    --yearclock by mrpeachy 2010 version2
    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 circlewriting(cr, text, font, fsize, radi, horiz, verti, tred, tgreen, tblue, talpha, start, finish, var1)
    local inum=string.len(text)
    range=finish
    deg=(finish-start)/(inum-1)
    degrads=1*(math.pi/180)
    local textcut=string.gsub(text, ".", "%1@@@")
    texttable=string.split(textcut, "@@@")
    for i = 1,inum do
    ival=i
    interval=(degrads*(start+(deg*(i-1))))+var1
    interval2=degrads*(start+(deg*(i-1)))
    txs=0+radi*(math.sin(interval))
    tys=0-radi*(math.cos(interval))
    cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
    cairo_set_font_size (cr, fsize);
    cairo_set_source_rgba (cr, tred, tgreen, tblue, talpha);
    cairo_move_to (cr, txs+horiz, tys+verti);
    cairo_rotate (cr, interval2)
    cairo_show_text (cr, (texttable[i]))
    cairo_rotate (cr, -interval2)
    cairo_move_to (cr,0,0)
    cairo_set_source_rgba (cr, 0, 0, 0, 0)
    cairo_line_to (cr,hx0,hy0)
    cairo_stroke (cr)
    end
    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="tenth"
                elseif datetable[2]=="1" then
                dateunit="eleventh"
                elseif datetable[2]=="2" then
                dateunit="twelfth"
                elseif datetable[2]=="3" then
                dateunit="thirteenth"
                elseif datetable[2]=="4" then
                dateunit="fourteenth"
                elseif datetable[2]=="5" then
                dateunit="fifteenth"
                elseif datetable[2]=="6" then
                dateunit="sixteenth"
                elseif datetable[2]=="7" then
                fisrtdigit="seventeenth"
                elseif datetable[2]=="8" then
                dateunit="eighteenth"
                elseif datetable[2]=="9" then
                dateunit="nineteenth"
                end
            end 
              
            if datetable[1]=="0" or datetable[1]>"1" then
                datespacer=" "
                if datetable[1]=="2" then
                datetens="twenty"
                elseif datetable[1]=="3" then
                datetens="thirty"
                elseif datetable[1]=="0" then
                datetens=""
                end 
                if datetable[2]=="1" then
                dateunit="first"
                elseif datetable[2]=="2" then
                dateunit="second"
                elseif datetable[2]=="3" then
                dateunit="third"
                elseif datetable[2]=="4" then
                dateunit="fourth"
                elseif datetable[2]=="5" then
                dateunit="fifth"
                elseif datetable[2]=="6" then
                dateunit="sixth"
                elseif datetable[2]=="7" then
                dateunit="seventh"
                elseif datetable[2]=="8" then
                dateunit="eighth"
                elseif datetable[2]=="9" then
                dateunit="nineth"
                elseif datetable[2]=="0" then
                dateunit=""
                datespacer=""
                end
            end
            if datetable[2]=="0" then
                datetens=""
                datespacer=""
                if datetable[1]=="2" then
                dateunit="twentieth"
                elseif datetable[1]=="3" then
                dateunit="thirtieth"
                end
            end    
        return ((datetens) .. (datespacer) .. (dateunit))
    end--end of function--------------------------------------------------------------------------------------
    
    function number_to_words(text)
    textlength=string.len(text)
    textcut=string.gsub(text, ".", "%1|")
    texttable=string.split(textcut, "|")
    --for NUMBERS from 1 to 999
    --for numbers 1 digit number----------
    if textlength==1 then
        if texttable[1]=="1" then
        firstdigit="one"
        elseif texttable[1]=="2" then
        firstdigit="two"
        elseif texttable[1]=="3" then
        firstdigit="three"
        elseif texttable[1]=="4" then
        firstdigit="four"
        elseif texttable[1]=="5" then
        firstdigit="five"
        elseif texttable[1]=="6" then
        firstdigit="six"
        elseif texttable[1]=="7" then
        firstdigit="seven"
        elseif texttable[1]=="8" then
        firstdigit="eight"
        elseif texttable[1]=="9" then
        firstdigit="nine"
        elseif texttable[1]=="0" then
        firstdigit="zero"
        end
    return firstdigit
    end
    --for 2 digit number------------------
    if textlength==2 then
        if texttable[1]=="1" then
            seconddigit=""
            spacer=""
            if texttable[2]=="0" then
            firstdigit="ten"
            elseif texttable[2]=="1" then
            firstdigit="eleven"
            elseif texttable[2]=="2" then
            firstdigit="twelve"
            elseif texttable[2]=="3" then
            firstdigit="thirteen"
            elseif texttable[2]=="4" then
            firstdigit="fourteen"
            elseif texttable[2]=="5" then
            firstdigit="fifteen"
            elseif texttable[2]=="6" then
            firstdigit="sixteen"
            elseif texttable[2]=="7" then
            fisrtdigit="seventeen"
            elseif texttable[2]=="8" then
            firstdigit="eighteen"
            elseif texttable[2]=="9" then
            firstdigit="nineteen"
            end
        end   
        if texttable[1]>"1" then
            spacer=" "
            if texttable[1]=="2" then
            seconddigit="twenty"
            elseif texttable[1]=="3" then
            seconddigit="thirty"
            elseif texttable[1]=="4" then
            seconddigit="fourty"
            elseif texttable[1]=="5" then
            seconddigit="fifty"
            elseif texttable[1]=="6" then
            seconddigit="sixty"
            elseif texttable[1]=="7" then
            seconddigit="seventy"
            elseif texttable[1]=="8" then
            seconddigit="eighty"
            elseif texttable[1]=="9" then
            seconddigit="ninety"
            end    
            if texttable[2]=="1" then
            firstdigit="one"
            elseif texttable[2]=="2" then
            firstdigit="two"
            elseif texttable[2]=="3" then
            firstdigit="three"
            elseif texttable[2]=="4" then
            firstdigit="four"
            elseif texttable[2]=="5" then
            firstdigit="five"
            elseif texttable[2]=="6" then
            firstdigit="six"
            elseif texttable[2]=="7" then
            firstdigit="seven"
            elseif texttable[2]=="8" then
            firstdigit="eight"
            elseif texttable[2]=="9" then
            firstdigit="nine"
            elseif texttable[2]=="0" then
            firstdigit=""
            spacer=""
            end
         end
    return ((seconddigit) .. (spacer) .. (firstdigit))
    end
    --for 3 digit numbers-----------------------------
    if textlength==3 then
        if texttable[2]=="0" and texttable[3]=="0" then space="" end
        if texttable[2]>"0" or texttable[3]>"0" then space=" and " end
        if texttable[2]=="0" and texttable[3]>"0" then spacer="" end
        
        if texttable[1]=="1" then
        thirddigit="one hundred"
        elseif texttable[1]=="2" then
        thirddigit="two hundred"
        elseif texttable[1]=="3" then
        thirddigit="three hundred"
        elseif texttable[1]=="4" then
        thirddigit="four hundred"
        elseif texttable[1]=="5" then
        thirddigit="five hundred"
        elseif texttable[1]=="6" then
        thirddigit="six hundred"
        elseif texttable[1]=="7" then
        thirddigit="seven hundred"
        elseif texttable[1]=="8" then
        thirddigit="eight hundred"
        elseif texttable[1]=="9" then
        thirddigit="nine hundred"
        end
        if texttable[2]=="0" or texttable[2]>"1" then
            if texttable[3]=="1" then
            firstdigit="one"
            elseif texttable[3]=="2" then
            firstdigit="two"
            elseif texttable[3]=="3" then
            firstdigit="three"
            elseif texttable[3]=="4" then
            firstdigit="four"
            elseif texttable[3]=="5" then
            firstdigit="five"
            elseif texttable[3]=="6" then
            firstdigit="six"
            elseif texttable[3]=="7" then
            firstdigit="seven"
            elseif texttable[3]=="8" then
            firstdigit="eight"
            elseif texttable[3]=="9" then
            firstdigit="nine"
            elseif texttable[3]=="0" then
            firstdigit=""
            spacer=""
            end 
        end
        if texttable[2]=="1" then
            seconddigit=""
            spacer=""  
            if texttable[3]=="0" then
            firstdigit="ten"
            elseif texttable[3]=="1" then
            firstdigit="eleven"
            elseif texttable[3]=="2" then
            firstdigit="twelve"
            elseif texttable[3]=="3" then
            firstdigit="thirteen"
            elseif texttable[3]=="4" then
            firstdigit="fourteen"
            elseif texttable[3]=="5" then
            firstdigit="fifteen"
            elseif texttable[3]=="6" then
            firstdigit="sixteen"
            elseif texttable[3]=="7" then
            firstdigit="seventeen"
            elseif texttable[3]=="8" then
            firstdigit="eighteen"
            elseif texttable[3]=="9" then
            firstdigit="nineteen"
            end
        end
        if texttable[2] >"1" then
            spacer=" "    
            if texttable[2]=="2" then
            seconddigit="twenty"
            elseif texttable[2]=="3" then
            seconddigit="thirty"
            elseif texttable[2]=="4" then
            seconddigit="fourty"
            elseif texttable[2]=="5" then
            seconddigit="fifty"
            elseif texttable[2]=="6" then
            seconddigit="sixty"
            elseif texttable[2]=="7" then
            seconddigit="seventy"
            elseif texttable[2]=="8" then
            seconddigit="eighty"
            elseif texttable[2]=="9" then
            seconddigit="ninety"
            elseif texttable[2]=="0" then
            seconddigit=""
            end
        end
    return ((thirddigit) .. (space) .. (seconddigit) .. (spacer) .. (firstdigit))
    end
    end--of function
    
    function conky_draw_fig()
    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
    
    cairo_set_line_width (cr,1)
    hx0=200
    hy0=200
    radius=40
    
    --months of the year---------------------------------------------------------------------------------------------------
    mnrad1=radius
    mnrad2=mnrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,mnrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,mnrad2,0,2*math.pi)
    cairo_stroke (cr)
    --calculations
    year4num=os.date("%Y")
    t1 = os.time( {    year=year4num,month=03,day=01,hour=00,min=0,sec=0} );
    t2 = os.time( {    year=year4num,month=02,day=01,hour=00,min=0,sec=0} );
    febdaynum=tonumber((os.difftime(t1,t2))/(24*60*60))
    yeardays=31+febdaynum+31+30+31+30+31+31+30+31+30+31
    yearsec=(yeardays*24*60*60)
    jan=31*24*60*60
    feb=jan+(febdaynum*24*60*60)
    mar=feb+(31*24*60*60)
    apr=mar+(30*24*60*60)
    may=apr+(31*24*60*60)
    jun=may+(30*24*60*60)
    jul=jun+(31*24*60*60)
    aug=jul+(31*24*60*60)
    sep=aug+(30*24*60*60)
    oct=sep+(31*24*60*60)
    nov=oct+(30*24*60*60)
    dec=nov+(31*24*60*60)
    secdays = { jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec }
    --circle indicator lines
    for i=1,12 do
    arc=((2*math.pi/360)*((360/yearsec)*(secdays[i])))
    mnx1=0+mnrad1*(math.sin(arc))
    mny1=0-mnrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/yearsec)*(secdays[i])))
    mnx2=0+mnrad2*(math.sin(arc))
    mny2=0-mnrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx2,hy0+mny2)
    cairo_stroke (cr)
    end
    --indicator
    doy=tonumber(os.date("%j"))
    yrsecs=((doy-1)*24*60*60)+(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    mnrad3=mnrad2+10
    arc=(2*math.pi/360)*((360/yearsec)*(yrsecs))
    mnx1=0+mnrad2*(math.sin(arc))
    mny1=0-mnrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/yearsec)*((yrsecs))+4)
    mnx2=0+mnrad3*(math.sin(arc))
    mny2=0-mnrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/yearsec)*((yrsecs))-4)
    mnx3=0+mnrad3*(math.sin(arc))
    mny3=0-mnrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx2,hy0+mny2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+mnx1,hy0+mny1)
    cairo_line_to (cr,hx0+mnx3,hy0+mny3)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    text1=((string.upper(os.date('%B'))) .. " TWO THOUSAND AND " .. string.upper(number_to_words(os.date('%y'))))
    --text must be in quotes
    text=text1
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=mnrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/yearsec)*((yrsecs))+4)
    slen2=string.len(text)
    finish=start+270
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of months around year-------------------------------------------------------------------------------------------------------------------------------
    
    --days around month----------------------------------------------------------------------
    drad1=mnrad3
    drad2=drad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,drad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,drad2,0,2*math.pi)
    cairo_stroke (cr)
    --calculations
    monthnum=(tonumber(os.date('%m')))
    monthdays = { 31, febdaynum, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
    --drawin circle indicator lines
    for i=1,monthdays[monthnum] do
    arc=((2*math.pi/360)*((360/monthdays[monthnum])*(i)))
    dx1=0+drad1*(math.sin(arc))
    dy1=0-drad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/monthdays[monthnum])*(i)))
    dx2=0+drad2*(math.sin(arc))
    dy2=0-drad2*(math.cos(arc))
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx2,hy0+dy2)
    cairo_stroke (cr)
    end
    --indicator
    daynumsec=(tonumber(os.date('%d'))*24*60*60)+(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    monthnumsec=(monthdays[monthnum])*24*60*60
    drad3=drad2+10
    arc=(2*math.pi/360)*((360/monthnumsec)*(daynumsec))
    dx1=0+drad2*(math.sin(arc))
    dy1=0-drad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/monthnumsec)*((daynumsec))+4)
    dx2=0+drad3*(math.sin(arc))
    dy2=0-drad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/monthnumsec)*((daynumsec))-4)
    dx3=0+drad3*(math.sin(arc))
    dy3=0-drad3*(math.cos(arc))
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx2,hy0+dy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+dx1,hy0+dy1)
    cairo_line_to (cr,hx0+dx3,hy0+dy3)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    text1=((string.upper(os.date('%A'))) .. " THE " .. string.upper(date_to_words()))
    --text must be in quotes
    text=text1
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=drad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/monthnumsec)*(daynumsec)+4)
    slen1=string.len(text)
    finish=start+(7.5*slen1)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of days around month-------------------------------------------------------------------------------------------------------
    
    --hours around day ---------------------------------------------------------------------------------------------------------------------
    hrad1=drad3
    hrad2=hrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw eings
    cairo_arc (cr,hx0,hy0,hrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,hrad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw ring indicator lines
    for i=1,24 do
    arc=((2*math.pi/360)*((360/24)*i))
    hx1=0+hrad1*(math.sin(arc))
    hy1=0-hrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/24)*i))
    hx2=0+hrad2*(math.sin(arc))
    hy2=0-hrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx2,hy0+hy2)
    cairo_stroke (cr)
    end
    --indicator
    hrsec=(tonumber(os.date('%H'))*60*60)+(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    --mns=mn+sc
    hrad3=hrad2+10
    arc=((2*math.pi/360)*((360/(24*60*60)*hrsec)))
    hx1=0+hrad2*(math.sin(arc))
    hy1=0-hrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(24*60*60))*(hrsec)-4)
    hx2=0+hrad3*(math.sin(arc))
    hy2=0-hrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(24*60*60))*(hrsec)+4)
    hx3=0+hrad3*(math.sin(arc))
    hy3=0-hrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx2,hy0+hy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+hx1,hy0+hy1)
    cairo_line_to (cr,hx0+hx3,hy0+hy3)
    cairo_stroke (cr)
    --circlewriting
    hrnum=tonumber(os.date('%H'))
    if hrnum==1 then hour="HOUR"
    else hour="HOURS" end
    text4=((string.upper(number_to_words(hrnum))) .. " " .. hour)
    --text must be in quotes
    text=text4
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=hrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/(24*60*60))*(hrsec)+4)
    slen4=string.len(text)
    finish=start+(slen4*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end of hours around day----------------------------------------------------------------------------------------------------
    
    --minutes around hour--------------------------------------------------------------------------------------------------------------
    mrad1=hrad3
    mrad2=mrad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,mrad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,mrad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw circle indicator lines
    for i=1,60 do
    arc=((2*math.pi/360)*((360/60)*i))
    mx1=0+mrad1*(math.sin(arc))
    my1=0-mrad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/60)*i))
    mx2=0+mrad2*(math.sin(arc))
    my2=0-mrad2*(math.cos(arc))
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx2,hy0+my2)
    cairo_stroke (cr)
    end
    --indicator
    minsec=(tonumber(os.date('%M'))*60)+(tonumber(os.date('%S')))
    mrad3=mrad2+10
    arc=((2*math.pi/360)*((360/(60*60)*minsec)))
    mx1=0+mrad2*(math.sin(arc))
    my1=0-mrad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(60*60))*(minsec)-4)
    mx2=0+mrad3*(math.sin(arc))
    my2=0-mrad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/(60*60))*(minsec)+4)
    mx3=0+mrad3*(math.sin(arc))
    my3=0-mrad3*(math.cos(arc))
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx2,hy0+my2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+mx1,hy0+my1)
    cairo_line_to (cr,hx0+mx3,hy0+my3)
    cairo_stroke (cr)
    --circlewriting
    min=tonumber(os.date('%M'))
    if min==1 then minute="MINUTE"
    else minute="MINUTES" end
    text4=((string.upper(number_to_words(min))) .. " " .. minute)
    --text must be in quotes
    text=text4
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=mrad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/(60*60))*(minsec)+4)
    slen4=string.len(text)
    finish=start+(slen4*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end minutes around hour--------------------------------------------------------------------------------------
    
    --seconds of minute-------------------------------------------------------------------------------------------
    srad1=mrad3
    srad2=srad1+10
    br1,bg1,bb1,ba1=1,1,1,1
    cairo_set_source_rgba (cr,br1,bg1,bb1,ba1)
    --draw circles
    cairo_arc (cr,hx0,hy0,srad1,0,2*math.pi)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,srad2,0,2*math.pi)
    cairo_stroke (cr)
    --draw circle indicator lines
    for i=1,60 do
    arc=((2*math.pi/360)*((360/60)*i))
    sx1=0+srad1*(math.sin(arc))
    sy1=0-srad1*(math.cos(arc))
    arc=((2*math.pi/360)*((360/60)*i))
    sx2=0+srad2*(math.sin(arc))
    sy2=0-srad2*(math.cos(arc))
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx2,hy0+sy2)
    cairo_stroke (cr)
    end
    --indicator
    sec=(tonumber(os.date('%S')))
    srad3=srad2+10
    arc=((2*math.pi/360)*((360/(60)*sec)))
    sx1=0+srad2*(math.sin(arc))
    sy1=0-srad2*(math.cos(arc))
    arc=(2*math.pi/360)*((360/60)*((sec))-4)
    sx2=0+srad3*(math.sin(arc))
    sy2=0-srad3*(math.cos(arc))
    arc=(2*math.pi/360)*((360/60)*((sec))+4)
    sx3=0+srad3*(math.sin(arc))
    sy3=0-srad3*(math.cos(arc))
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx2,hy0+sy2)
    cairo_stroke (cr)
    cairo_move_to (cr,hx0+sx1,hy0+sy1)
    cairo_line_to (cr,hx0+sx3,hy0+sy3)
    cairo_stroke (cr)
    cairo_arc (cr,hx0,hy0,srad3,0,2*math.pi)
    cairo_stroke (cr)
    --circlewriting
    --circlewriting variable
    sec=tonumber(os.date('%S'))
    if sec==1 then second="SECOND"
    else second="SECONDS" end
    text3=((string.upper(number_to_words(sec))) .. " " .. second)
    --text must be in quotes
    text=text3
    --font name must be in quotes
    font="mono"
    fontsize=10
    radius=srad2+1
    positionx=hx0
    positiony=hy0
    colorred=1
    colorgreen=1
    colorblue=1
    coloralpha=1
    --to set start and finish values for circlewriting, if the text will cross 0 degrees then you must calculate for 360+finish degrees
    --eg if you want to go from 270 to 90, then you will input 270 to 450.  Finish has to be greater than start.
    start=((360/60)*((sec))+4)
    slen3=string.len(text)
    finish=start+(slen3*5)
    letterposition=0
    circlewriting(cr, text, font, fontsize, radius, positionx, positiony, colorred, colorgreen, colorblue, coloralpha, start, finish, letterposition)
    --end seconds of minute-----------------------------------------------------------------------------------------------------------------------------
    --end of calendar---------------------------------------------------------------------------------------------------
    end--of if updates>5
    end--of main function
    call it in conky
    Code:
    lua_load /path/to/file/filename.lua
    lua_draw_hook_pre draw_fig
    Thank you kind sir
    I'm a super power user

Page 1573 of 2348 FirstFirst ... 5731073147315231563157115721573157415751583162316732073 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •