Advertisement
maxpro4u

lua

Jul 23rd, 2014
669
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2. This conky config reEdit by despot77 at http://gnome-look.org/content/show.php/Conky+lua?content=139024
  3.  
  4. This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script.
  5.  
  6. IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num>5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num>3; conversely if you update Conky every 0.5s, you should use update_num>10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
  7.  
  8. To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
  9. lua_load ~/scripts/clock_rings.lua
  10. lua_draw_hook_pre clock_rings
  11.  
  12. Original Conky :
  13. 2011mint -- reEdit despot77 (18.02.2011)
  14. ]]
  15.  
  16. settings_table = {
  17. {
  18. -- Edit this table to customise your rings.
  19. -- You can create more rings simply by adding more elements to settings_table.
  20. -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
  21. name='time',
  22. -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
  23. arg='%I.%M',
  24. -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
  25. max=12,
  26. -- "bg_colour" is the colour of the base ring.
  27. bg_colour=0xffffff,
  28. -- "bg_alpha" is the alpha value of the base ring.
  29. bg_alpha=0.1,
  30. -- "fg_colour" is the colour of the indicator part of the ring.
  31. fg_colour=0x4EC6DE,
  32. -- "fg_alpha" is the alpha value of the indicator part of the ring.
  33. fg_alpha=0.2,
  34. -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
  35. x=100, y=150,
  36. -- "radius" is the radius of the ring.
  37. radius=50,
  38. -- "thickness" is the thickness of the ring, centred around the radius.
  39. thickness=5,
  40. -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
  41. start_angle=0,
  42. -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger than start_angle.
  43. end_angle=360
  44. },
  45. {
  46. name='time',
  47. arg='%M.%S',
  48. max=60,
  49. bg_colour=0xffffff,
  50. bg_alpha=0.1,
  51. fg_colour=0x4EC6DE,
  52. fg_alpha=0.4,
  53. x=100, y=150,
  54. radius=56,
  55. thickness=5,
  56. start_angle=0,
  57. end_angle=360
  58. },
  59. {
  60. name='time',
  61. arg='%S',
  62. max=60,
  63. bg_colour=0xffffff,
  64. bg_alpha=0.1,
  65. fg_colour=0x4EC6DE,
  66. fg_alpha=0.6,
  67. x=100, y=150,
  68. radius=62,
  69. thickness=5,
  70. start_angle=0,
  71. end_angle=360
  72. },
  73. {
  74. name='time',
  75. arg='%d',
  76. max=31,
  77. bg_colour=0xffffff,
  78. bg_alpha=0.1,
  79. fg_colour=0x4EC6DE,
  80. fg_alpha=0.8,
  81. x=100, y=150,
  82. radius=70,
  83. thickness=5,
  84. start_angle=-90,
  85. end_angle=90
  86. },
  87. {
  88. name='time',
  89. arg='%m',
  90. max=12,
  91. bg_colour=0xffffff,
  92. bg_alpha=0.1,
  93. fg_colour=0x4EC6DE,
  94. fg_alpha=1,
  95. x=100, y=150,
  96. radius=76,
  97. thickness=5,
  98. start_angle=-90,
  99. end_angle=90
  100. },
  101. {
  102. name='cpu',
  103. arg='cpu1',
  104. max=100,
  105. bg_colour=0xffffff,
  106. bg_alpha=0.2,
  107. fg_colour=0x4EC6DE,
  108. fg_alpha=0.8,
  109. x=120, y=270,
  110. radius=30,
  111. thickness=5,
  112. start_angle=-80,
  113. end_angle=160
  114. },
  115. {
  116. name='cpu',
  117. arg='cpu0',
  118. max=100,
  119. bg_colour=0xffffff,
  120. bg_alpha=0.2,
  121. fg_colour=0x4EC6DE,
  122. fg_alpha=0.8,
  123. x=120, y=270,
  124. radius=45,
  125. thickness=5,
  126. start_angle=-100,
  127. end_angle=200
  128. },
  129. {
  130. name='memperc',
  131. arg='',
  132. max=100,
  133. bg_colour=0xffffff,
  134. bg_alpha=0.2,
  135. fg_colour=0x4EC6DE,
  136. fg_alpha=0.8,
  137. x=40, y=330,
  138. radius=35,
  139. thickness=5,
  140. start_angle=-120,
  141. end_angle=180
  142. },
  143. {
  144. name='acpitemp',
  145. arg='',
  146. max=212,
  147. bg_colour=0xffffff,
  148. bg_alpha=0.2,
  149. fg_colour=0x4EC6DE,
  150. fg_alpha=0.8,
  151. x=100, y=390,
  152. radius=30,
  153. thickness=5,
  154. start_angle=-100,
  155. end_angle=180
  156. },
  157. {
  158. name='fs_used_perc',
  159. arg='/',
  160. max=100,
  161. bg_colour=0xffffff,
  162. bg_alpha=0.2,
  163. fg_colour=0x4EC6DE,
  164. fg_alpha=0.8,
  165. x=30, y=455,
  166. radius=25,
  167. thickness=5,
  168. start_angle=-90,
  169. end_angle=180
  170. },
  171. {
  172. name='fs_used_perc',
  173. arg='/home',
  174. max=100,
  175. bg_colour=0xffffff,
  176. bg_alpha=0.2,
  177. fg_colour=0x4EC6DE,
  178. fg_alpha=0.8,
  179. x=90, y=455,
  180. radius=25,
  181. thickness=5,
  182. start_angle=-90,
  183. end_angle=180
  184. },
  185. {
  186. name='battery_percent',
  187. arg='C23B',
  188. max=100,
  189. bg_colour=0xffffff,
  190. bg_alpha=0.2,
  191. fg_colour=0x4EC6DE,
  192. fg_alpha=0.8,
  193. x=150, y=455,
  194. radius=25,
  195. thickness=5,
  196. start_angle=-90,
  197. end_angle=180
  198. },
  199. {
  200. name='downspeedf',
  201. arg='eth0',
  202. max=100,
  203. bg_colour=0xffffff,
  204. bg_alpha=0.2,
  205. fg_colour=0x4EC6DE,
  206. fg_alpha=0.8,
  207. x=130, y=510,
  208. radius=25,
  209. thickness=4,
  210. start_angle=-90,
  211. end_angle=180
  212. },
  213. {
  214. name='upspeedf',
  215. arg='eth0',
  216. max=100,
  217. bg_colour=0xffffff,
  218. bg_alpha=0.2,
  219. fg_colour=0x4EC6DE,
  220. fg_alpha=0.8,
  221. x=130, y=510,
  222. radius=20,
  223. thickness=4,
  224. start_angle=-90,
  225. end_angle=180
  226. },
  227. {
  228. name='downspeedf',
  229. arg='wlp16s0',
  230. max=100,
  231. bg_colour=0xffffff,
  232. bg_alpha=0.2,
  233. fg_colour=0x4EC6DE,
  234. fg_alpha=0.8,
  235. x=50, y=510,
  236. radius=25,
  237. thickness=4,
  238. start_angle=-90,
  239. end_angle=180
  240. },
  241. {
  242. name='upspeedf',
  243. arg='wlp16s0',
  244. max=100,
  245. bg_colour=0xffffff,
  246. bg_alpha=0.2,
  247. fg_colour=0x4EC6DE,
  248. fg_alpha=0.8,
  249. x=50, y=510,
  250. radius=20,
  251. thickness=4,
  252. start_angle=-90,
  253. end_angle=180
  254. },
  255. {
  256. name='wireless_link_qual',
  257. arg='wlp16s0',
  258. max=100,
  259. bg_colour=0xffffff,
  260. bg_alpha=0.2,
  261. fg_colour=0x4EC6DE,
  262. fg_alpha=0.8,
  263. x=90, y=560,
  264. radius=25,
  265. thickness=4,
  266. start_angle=-90,
  267. end_angle=180
  268. },
  269. {
  270. name='wireless_link_qual',
  271. arg='wlp16s0',
  272. max=100,
  273. bg_colour=0xffffff,
  274. bg_alpha=0.2,
  275. fg_colour=0x4EC6DE,
  276. fg_alpha=0.8,
  277. x=90, y=560,
  278. radius=20,
  279. thickness=4,
  280. start_angle=-90,
  281. end_angle=180
  282. },
  283. }
  284.  
  285. -- Use these settings to define the origin and extent of your clock.
  286.  
  287. clock_r=65
  288.  
  289. -- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.
  290.  
  291. clock_x=100
  292. clock_y=150
  293.  
  294. show_seconds=true
  295.  
  296. require 'cairo'
  297.  
  298. function rgb_to_r_g_b(colour,alpha)
  299. return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
  300. end
  301.  
  302. function draw_ring(cr,t,pt)
  303. local w,h=conky_window.width,conky_window.height
  304.  
  305. local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
  306. local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
  307.  
  308. local angle_0=sa*(2*math.pi/360)-math.pi/2
  309. local angle_f=ea*(2*math.pi/360)-math.pi/2
  310. local t_arc=t*(angle_f-angle_0)
  311.  
  312. -- Draw background ring
  313.  
  314. cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
  315. cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
  316. cairo_set_line_width(cr,ring_w)
  317. cairo_stroke(cr)
  318.  
  319. -- Draw indicator ring
  320.  
  321. cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
  322. cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
  323. cairo_stroke(cr)
  324. end
  325.  
  326. function draw_clock_hands(cr,xc,yc)
  327. local secs,mins,hours,secs_arc,mins_arc,hours_arc
  328. local xh,yh,xm,ym,xs,ys
  329.  
  330. secs=os.date("%S")
  331. mins=os.date("%M")
  332. hours=os.date("%I")
  333.  
  334. secs_arc=(2*math.pi/60)*secs
  335. mins_arc=(2*math.pi/60)*mins+secs_arc/60
  336. hours_arc=(2*math.pi/12)*hours+mins_arc/12
  337.  
  338. -- Draw hour hand
  339.  
  340. xh=xc+0.7*clock_r*math.sin(hours_arc)
  341. yh=yc-0.7*clock_r*math.cos(hours_arc)
  342. cairo_move_to(cr,xc,yc)
  343. cairo_line_to(cr,xh,yh)
  344.  
  345. cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
  346. cairo_set_line_width(cr,5)
  347. cairo_set_source_rgba(cr,1.0,1.0,1.0,1.0)
  348. cairo_stroke(cr)
  349.  
  350. -- Draw minute hand
  351.  
  352. xm=xc+clock_r*math.sin(mins_arc)
  353. ym=yc-clock_r*math.cos(mins_arc)
  354. cairo_move_to(cr,xc,yc)
  355. cairo_line_to(cr,xm,ym)
  356.  
  357. cairo_set_line_width(cr,3)
  358. cairo_stroke(cr)
  359.  
  360. -- Draw seconds hand
  361.  
  362. if show_seconds then
  363. xs=xc+clock_r*math.sin(secs_arc)
  364. ys=yc-clock_r*math.cos(secs_arc)
  365. cairo_move_to(cr,xc,yc)
  366. cairo_line_to(cr,xs,ys)
  367.  
  368. cairo_set_line_width(cr,1)
  369. cairo_stroke(cr)
  370. end
  371. end
  372.  
  373. function conky_clock_rings()
  374. local function setup_rings(cr,pt)
  375. local str=''
  376. local value=0
  377.  
  378. str=string.format('${%s %s}',pt['name'],pt['arg'])
  379. str=conky_parse(str)
  380.  
  381. value=tonumber(str)
  382. pct=value/pt['max']
  383.  
  384. draw_ring(cr,pct,pt)
  385. end
  386.  
  387. -- Check that Conky has been running for at least 5s
  388.  
  389. if conky_window==nil then return end
  390. local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
  391.  
  392. local cr=cairo_create(cs)
  393.  
  394. local updates=conky_parse('${updates}')
  395. update_num=tonumber(updates)
  396.  
  397. if update_num>5 then
  398. for i in pairs(settings_table) do
  399. setup_rings(cr,settings_table[i])
  400. end
  401. end
  402.  
  403. draw_clock_hands(cr,clock_x,clock_y)
  404. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement