Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#51 Le 10/07/2010, à 15:57

Vermouth

Re : Postez vos scripts Lua pour Conky !

j'ai observé sont code lua et je n'est rien de différent, mais mes anneaux pour ces disques non monté me retourne la même occupation que ma racine

En parcourant (très) rapidement le script, je pense avoir trouver le problème.
Tu(le script) fait un "fs_used_perc" sur une partition non monté donc conky (le script lua utilise conky_parse, soit les mêmes valeurs que celle afficher dans conky avec les mêmes commandes) renvoie la valeur pour la racine.
Donc il faut que tu enlève ou ajoute dans settings_table les paramètres des partitions selon si elle sont monter ou non (pour celle susceptible de ne pas être monté).

Ce script est un poil trop "static" a mon goût.
Au mieux, tu met pas les partitions potentiellement non monté dans settings_table et tu fait un appel à setup_rings(dans conky_ring_stats) en passant le tableaux des paramètres qui faut (élément de settings_table correspondant à la partition).


Android !
\_/°<

   coin coin...

Hors ligne

#52 Le 10/07/2010, à 19:02

GrindeR

Re : Postez vos scripts Lua pour Conky !

je te le dis franchement j'ai pas tous compris!

Donc il faut que tu enlève ou ajoute dans settings_table les paramètres des partitions selon si elle sont monter ou non (pour celle susceptible de ne pas être monté).

j'en déduis qu'il faudrait que je rajoute un "if_mounted" quelque part dans les paramètre du dit anneaux, sauf que je viens d'éssayer plusieurs manière et sa me fait sauter tous les anneaux qui suivent dans la settings_table.
et la console me crache que lua n'arrive pas à calculer (pas étonnant)

Au mieux, tu met pas les partitions potentiellement non monté dans settings_table et tu fait un appel à setup_rings(dans conky_ring_stats) en passant le tableaux des paramètres qui faut (élément de settings_table correspondant à la partition).

ok je séche!
mais je comprend que je ne declare pas mes anneaux pour mes disques non monté dans la settings_table et que je les dessine au besoin si "monté" oui?
mais comment dans le code lua tu réalise ce test, car il faut bien testé , avant de dessiné sinon le preoblème reste le même!

en esperant que c'est clair ce coup si hmm


Informaticien où Troll, j'ai choisis les deux!
MountyHall, la Terre des Trõlls

Hors ligne

#53 Le 10/07/2010, à 19:49

Vermouth

Re : Postez vos scripts Lua pour Conky !

Je suis d'accord mes explications ne sont pas très clair lol !
Je suppose que la partition qui pose problème et /home/grinder
Bref, utilise la settings_table suivante (modif: on enlève grinder):

settings_table = {
    {
        name='memperc',
        arg='',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x8B008B,
        fg_alpha=0.7,
        x=75, y=90,
        radius=50,
        thickness=10,
        start_angle=91,
        end_angle=270,
    },
    {
        name="execpi 8 awk '/Cached/ {print $2/1024}' /proc/meminfo | head -1",
        arg='',
        max=2048,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x9932CC,
        fg_alpha=0.7,
        x=75, y=90,
        radius=59,
        thickness=5,
        start_angle=91,
        end_angle=180,
    },
    {
        name="execpi 8 awk '/Buffers/ {print $2/(1024)}' /proc/meminfo",
        arg='',
        max=2048,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x9932CC,
        fg_alpha=0.7,
        x=75, y=90,
        radius=59,
        thickness=5,
        start_angle=181,
        end_angle=270,
    },
    {
        name='swapperc',
        arg='',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0xBA55D3,
        fg_alpha=0.7,
        x=75, y=90,
        radius=65,
        thickness=5,
        start_angle=91,
        end_angle=270,
    },
    {
        name='execpi 8 sensors | grep -i "cpu temp" | cut -c 22-23',
        arg='',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0xC71585,
        fg_alpha=0.7,
        x=185, y=90,
        radius=40,
        thickness=2,
        start_angle=50,
        end_angle=170,
    },
    {
        name='execpi 8 sensors | grep -i "mb Temp" | cut -c 22-23',
        arg='',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x9370DB,
        fg_alpha=0.7,
        x=185, y=90,
        radius=40,
        thickness=2,
        start_angle=-70,
        end_angle=50,
    },
    {
        name='cpu',
        arg='cpu1',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0xBA55D3,
        fg_alpha=0.7,
        x=185, y=90,
        radius=45,
        thickness=5,
        start_angle=-89,
        end_angle=89,
    },
    {
        name='cpu',
        arg='cpu2',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x9932CC,
        fg_alpha=0.7,
        x=185, y=90,
        radius=51,
        thickness=5,
        start_angle=-89,
        end_angle=89,
    },
    {
        name='cpu',
        arg='cpu0',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x8B008B,
        fg_alpha=0.7,
        x=185, y=90,
        radius=60,
        thickness=10,
        start_angle=-89,
        end_angle=89,
    },
    {
        name='fs_used_perc',
        arg='/',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x8B008B,
        fg_alpha=0.7,
        x=295, y=90,
        radius=50,
        thickness=10,
        start_angle=91,
        end_angle=269,
    },
    {
        name='fs_used_perc',
        arg='/media/Ubuntu',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x9932CC,
        fg_alpha=0.7,
        x=295, y=90,
        radius=59,
        thickness=5,
        start_angle=91,
        end_angle=269,
    },
    {
        name='fs_used_perc',
        arg='/media/WIN-XP',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0xBA55D3,
        fg_alpha=0.7,
        x=295, y=90,
        radius=65,
        thickness=5,
        start_angle=91,
        end_angle=269,
    },
}

Et dans conky_ring_stats tu rajoute:

local grinder = {
        name='fs_used_perc',
        arg='/home/grinder',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x8B008B,
        fg_alpha=0.7,
        x=405, y=90,
        radius=60,
        thickness=10,
        start_angle=-89,
        end_angle=89,
    }
if conky_parse("${if_mounted /home/grinder}y${else}n${endif}") == "y" then
  draw_ring(cr, grinder)
end

Et ça devrais marcher...
Tu répète l'opération pour toute les partitions pouvant ne pas être monter.


Android !
\_/°<

   coin coin...

Hors ligne

#54 Le 11/07/2010, à 08:13

wlourf

Re : Postez vos scripts Lua pour Conky !

Salut,

Une autre solution : à la place d'afficher ou non l'anneau, tu peux mettre sa valeur à 0 (ou 100% ou autre chose, ça dépend de tes goûts tongue), tu gardes ta table initiale et tu changes la fonction conky_rings_stats par celle-ci

function conky_ring_stats()
    local function setup_rings(cr,pt)
        local str=''
        local value=0

		if pt.name~="" then
	        str=string.format('${%s %s}',pt['name'],pt['arg'])
	        value=tonumber(conky_parse(str))
	    else
	    	value=tonumber(pt.arg)
	    end
        

        pct=value/pt['max']

        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)

    local cr=cairo_create(cs)    

    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)


    if update_num>6 then

	if conky_parse("${if_mounted /home/grinder}y${else}n${endif}") == "n" then
		for i,t in pairs(settings_table) do
			if t.arg  == "/home/grinder" then
				t.name,t.arg="",0
				break
			end
		end
	end

        for i in pairs(settings_table) do
            setup_rings(cr,settings_table[i])
        end
    end
end

Explications : (j'arrive pas à metre en gras dans la balise code alors je recopie) :

	if conky_parse("${if_mounted /home/grinder}y${else}n${endif}") == "n" then
		for i,t in pairs(settings_table) do
			if t.arg  == "/home/grinder" then
				t.name,t.arg="",0
				break
			end
		end
	end

on vérifie si la partition est montée, si pas monté : on parcourt la table settings_table pour trouver la sous-table qui a arg="/home/grinder". Quand elle est trouvée, on modifie la valeur de arg et de name avec t.name="" et t.arg=0.

puis :

	    if pt.name~="" then
	        str=string.format('${%s %s}',pt['name'],pt['arg'])
	        value=tonumber(conky_parse(str))
	    else
	    	value=tonumber(pt.arg)
	    end

on modifie la fonction pour afficher une valeur (arg) à la place d'une variable conky.

a+

Edit: si tu as plusieurs disques à vérifier, tu recopie la boucle "if_mounted", on pourrait faire qu'une seule boucle pour vérifier tout les disques mais bon, pour 2 petites vérifications, ça vaut peut-être pas le coup !

Dernière modification par wlourf (Le 11/07/2010, à 08:19)

Hors ligne

#55 Le 11/07/2010, à 09:23

Vermouth

Re : Postez vos scripts Lua pour Conky !

wlourf a écrit :

Explications : (j'arrive pas à metre en gras dans la balise code alors je recopie) :
Code:

    if conky_parse("${if_mounted /home/grinder}y${else}n${endif}") == "n" then
        for i,t in pairs(settings_table) do
            if t.arg  == "/home/grinder" then
                t.name,t.arg="",0
                break
            end
        end
    end

on vérifie si la partition est montée, si pas monté : on parcourt la table settings_table pour trouver la sous-table qui a arg="/home/grinder". Quand elle est trouvée, on modifie la valeur de arg et de name avec t.name="" et t.arg=0.

Mouai c'est bisare ta technique je  trouve lol !

J'aurai fait plus simple dans le même esprit:

for i,t in pairs(settings_table) do
  if t.name == "fs_used_perc" and conky_parse("${if_mounted " .. t.arg .. "}y${else}n${endif}") == "n" then
     t.name,t.arg="",0
  end
end

Comme ça ça vérifie toute les partitions.
Mais là le problème c'est que faite:

t.name,t.arg="",0

... va modifier settings_table donc en faite c'est pas une bonne idée (la mienne ou la tienne).

Le mieux serait:

function conky_ring_stats()
    local function setup_rings(cr,pt)
        local str=''
        local value=0
        if t.name == "fs_used_perc" and conky_parse("${if_mounted " .. t.arg .. "}y${else}n${endif}") == "n" then
             draw_ring(cr,0,pt)
             return;
        end
        str=string.format('${%s %s}',pt['name'],pt['arg'])
        str=conky_parse(str)

        value=tonumber(str)
        pct=value/pt['max']

        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)

    local cr=cairo_create(cs)    

    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)

    if update_num>5 then
        for i in pairs(settings_table) do
            setup_rings(cr,settings_table[i])
        end
    end
end

avec juste l'ajout de:

        if t.name == "fs_used_perc" and conky_parse("${if_mounted " .. t.arg .. "}y${else}n${endif}") == "n" then
             draw_ring(cr,0,pt)
             return;
        end

..;dans setup_ring.

Dernière modification par Vermouth (Le 11/07/2010, à 09:24)


Android !
\_/°<

   coin coin...

Hors ligne

#56 Le 11/07/2010, à 10:08

wlourf

Re : Postez vos scripts Lua pour Conky !

ah mais ça ne me pose pas de problème de modifier la table settings personnellement, par contre bien ta façon de vérifier toutes les partitions mais dans ce cas tu vas appeler plusieurs fois (13 fois ici) conky_parse et ça doit pas être top tongue
J'aurai plutôt mis  :

if t.name == "fs_used_perc" then
	if conky_parse("${if_mounted " .. t.arg .. "}y${else}n${endif}") == "n" then
		draw_ring(cr,0,pt)
		return;
	end
end

et encore, on a souvent des partitions qui sont obligatoirement montées, donc j'aurai ajouté un paramètre facultatif dans les tables : "verif" pour ne vérifier que les partitions necessaires :

    {
        name='fs_used_perc',
        arg='/data',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0xBA55D3,
        fg_alpha=0.7,
        x=295, y=90,
        radius=65,
        thickness=5,
        start_angle=91,
        end_angle=269,
        verif=1,
    },
    {
        name='fs_used_perc',
        arg='/home',
        max=100,
        bg_colour=0xFFFFFF,
        bg_alpha=0.05,
        fg_colour=0x8B008B,
        fg_alpha=0.7,
        x=405, y=90,
        radius=60,
        thickness=10,
        start_angle=-89,
        end_angle=89,
    },

si verif est présent avec n'importe quelle valeur, on vérifie si le disque est monté, sinon, on applique la procédure normale (j'en profite pour raccourcir la ligne conky_parse)

        if pt.verif ~=nil then
        	 if conky_parse("${if_mounted " .. pt.arg .. "}y${endif}") ~= "y" then
				draw_ring(cr,0,pt)
				return;
            end
        end

au final , ça donnerai :

function conky_ring_stats()
    local function setup_rings(cr,pt)
        local str=''
        local value=0
        if pt.verif ~=nil then
        	if conky_parse("${if_mounted " .. pt.arg .. "}y${endif}") ~= "y" then
				draw_ring(cr,0,pt)
				return;
            end
        end
        str=string.format('${%s %s}',pt['name'],pt['arg'])
        str=conky_parse(str)

        value=tonumber(str)
        pct=value/pt['max']

        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)

    local cr=cairo_create(cs)    

    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)

    if update_num>5 then
        for i in pairs(settings_table) do
            setup_rings(cr,settings_table[i])
        end
    end
end

j'espère que grinder va s'y retrouver smile

Hors ligne

#57 Le 11/07/2010, à 10:57

Vermouth

Re : Postez vos scripts Lua pour Conky !

ah mais ça ne me pose pas de problème de modifier la table settings personnellement

Oui mais une fois que tu a mis name à "", tu perd la commande original. Donc même si la partition est monté plus tard...

ah mais ça ne me pose pas de problème de modifier la table settings personnellement, par contre bien ta façon de vérifier toutes les partitions mais dans ce cas tu vas appeler plusieurs fois (13 fois ici) conky_parse et ça doit pas être top tongue
J'aurai plutôt mis  :

Non car si le premier teste est faux, le deuxième n'est même pas fait (car faux et quelque_chose est toujours faux).

et encore, on a souvent des partitions qui sont obligatoirement montées, donc j'aurai ajouté un paramètre facultatif dans les tables : "verif" pour ne vérifier que les partitions necessaires :

Bonne solution aussi.


Android !
\_/°<

   coin coin...

Hors ligne

#58 Le 11/07/2010, à 12:08

wlourf

Re : Postez vos scripts Lua pour Conky !

ok merci de tes conseils smile

Hors ligne

#59 Le 11/07/2010, à 17:56

GrindeR

Re : Postez vos scripts Lua pour Conky !

vous n'avez pas perdus de temps!!
j'en retiens de vos propositions plein de chose intéressante
tout particulierement le coup de

et encore, on a souvent des partitions qui sont obligatoirement montées, donc j'aurai ajouté un paramètre facultatif dans les tables : "verif" pour ne vérifier que les partitions nécessaires

maintenant j'ai essayer à la suite vos différentes propositions et je n'avais toujours pas le résultat attendus bien que tous paraissent logiques...
et la eurêka!
j'avais agrémenter mon "fstab" d'entrées pour gérer les différentes partitions supplémentaires, et donc j'avais créer les points de montages.

j'ai restaurer mon fstab d'origine et quand j'accède a la volée sur les dites partitions le point de montage ce  créer/détruit tout seul et la plus de problème!

je me sens bête du coup...

Dernière modification par GrindeR (Le 11/07/2010, à 17:57)


Informaticien où Troll, j'ai choisis les deux!
MountyHall, la Terre des Trõlls

Hors ligne

#60 Le 15/07/2010, à 17:25

wlourf

Re : Postez vos scripts Lua pour Conky !

bonjour,

J'ai fait une mise à jour d'un vieux script qui affiche des barres ... il est plus simple d'utilisation (on passe par des tables) et j'ai ajouté quelques effets comme la réflexion.

1294855403.png

Le script est téléchargeable sur deviantArt.

Je ne suis pas le premier ni le dernier à faire des bargraphs mais voici un exemple de config sympatique avec ce script smile je posterai un conky un peu plus tard

{
    name="",
    arg=70,
    max=100,
    bg_colour={0x00ff33,0},
    fg_colour={0xffff00,0},
    bg_led={0x00ff33,0.5},
    fg_led={0xffff00,1},
    blocks=20,
    height=10,width=40,
    angle=90,
    led_effect="r",
    reflection_alpha=1,
    reflection="r"
},

2caa5af087f1e01feac4b9219d46d.png

Dernière modification par wlourf (Le 12/01/2011, à 19:03)

Hors ligne

#61 Le 15/07/2010, à 18:50

Fenouille84

Re : Postez vos scripts Lua pour Conky !

@ wlourf

Cool ton script, et vraiment très simple d'usage !! Bravo !!

Par contre, comment faire pour y intégrer le correctif pour hddtemp ?
Toutes les modif ont été postées pour des anneaux, pas des barres... hmm

Oui, je n'y connais rien au Lua smile


Edit :
J'ai trouvé une solution, ultra basique, mais qui fonctionne et supprime le clignotement ^^

name="exec",
 arg="hddtemp /dev/sda | cut -c 24-25"

Dernière modification par Fenouille84 (Le 15/07/2010, à 19:13)


Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --

Hors ligne

#62 Le 15/07/2010, à 19:33

wlourf

Re : Postez vos scripts Lua pour Conky !

mince alors, j'allais poster *exactement* la même réponse quand j'ai vu ton edit ! car chez moi non plus hddtemp dans conky ne fonctionne pas, n'oublie pas le max=100, voire moins !

Hors ligne

#63 Le 15/07/2010, à 19:37

Fenouille84

Re : Postez vos scripts Lua pour Conky !

@wlourf

Oui, j'ai mis un max=50.
C'est pas trop bon si les disques durs dépassent les 50-55 degrés... yikes


Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --

Hors ligne

#64 Le 22/07/2010, à 11:14

GrindeR

Re : Postez vos scripts Lua pour Conky !

J'ai été faire un tour sur le fofo russe la où vous avez trouvés le calendrier/boussole en début de topic

ils ont faits plusieurs scripts très intéressants et je suis en train d'essayer de mixer le texte en cerle avec mon script mais ça fonctionne pas vraiment.
au début ça allais comme j'utilisais le code greffon à l'état brut, mais j'ai voulus le modifier pour pouvoir utiliser une table de paramètre et la patatras!! ça veux pas!
si on peut utiliser un table de paramètre on doit pouvoir en utiliser plusieurs, non?

le résultat en console :

grinder@Obuntu||~$
Conky: desktop window (15a) is root window
Conky: window type - desktop
Conky: drawing to created window (0x1000001)
Conky: drawing to double buffer
Conky: llua_do_call: function conky_textes_rings execution failed: /home/grinder/.conky/scripts/mod_rings.lua:354: attempt to index local 'pt' (a nil value)
Conky: llua_do_call: function conky_textes_rings execution failed: /home/grinder/.conky/scripts/mod_rings.lua:354: attempt to index local 'pt' (a nil value)

il y'a pas plus clair, j'ai un problème de déclaration, sauf que je ne comprend pas pourquoi! j'ai vérifier et revérifier toutes mes substitutions et je trouve rien qui cloche!

et le code lua

--[[
Ring Meters by londonali1010 (2009)

This script draws percentage meters as rings. It is fully customisable; all options are described in the script.

IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num>5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num>3; conversely if you update Conky every 0.5s, you should use update_num>10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.

To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
	lua_load ~/scripts/rings-v1.2.lua
	lua_draw_hook_pre ring_widget

Changelog:
+ v1.2 -- Added option for the ending angle of the rings (07.10.2009)
+ v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
+ v1.0 -- Original release (28.09.2009)
]]
				--[[START RINGS SETTINGS]]
rings_settings={
	-- FIRST RINGS GROUP
	{
		name='memperc', arg='',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=90,
		radius=40, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='swapperc', arg='',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=90,
		radius=55, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name="execpi 8 awk '/Cached/ {print $2/1024}' /proc/meminfo | head -1", arg='',
		max=2048,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=90,
		radius=70, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name="execpi 8 awk '/Buffers/ {print $2/(1024)}' /proc/meminfo", arg='',
		max=2048,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=90,
		radius=85, thickness=15,
		start_angle=-75, end_angle=115,
	},
	-- SECOND RINGS GROUP
	{
		name='cpu', arg='cpu2',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=235,
		radius=40, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='cpu', arg='cpu1',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=235,
		radius=55, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='cpu', arg='cpu0',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=235,
		radius=70, thickness=15,
		start_angle=-75, end_angle=115,
	},
	-- THIRD RINGS GROUP
	{
		name='fs_used_perc', arg='/',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=388,
		radius=40, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='fs_used_perc', arg='/media/disk',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=388,
		radius=55, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='fs_used_perc', arg='/media/WIN-XP',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=388,
		radius=70, thickness=15,
		start_angle=-75, end_angle=115,
	},
	-- FOURTH RINGS GROUP
	{
		name='fs_used_perc', arg='/home/grinder',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=541,
		radius=40, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='fs_used_perc', arg='/media/DOCTECHINFO',
		max=100,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=541,
		radius=55, thickness=15,
		start_angle=-75, end_angle=115,
	},
	-- FIFTH RINGS GROUP
	{
		name='downspeedf', arg='',
		max=4096,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=694,
		radius=40, thickness=15,
		start_angle=-75, end_angle=115,
	},
	{
		name='upspeedf', arg='',
		max=8192,
		bg_colour=0xFFFFFF, bg_alpha=0.07,
		fg_colour=0x1E90FF, fg_alpha=0.5,
		x=100, y=694,
		radius=55, thickness=15,
		start_angle=-75, end_angle=115,
	},
}
					--[[END RINGS SETTINGS]]

					--[[START TEXT RINGS SETTINGS]]
textes_settings={
	-- FIRST TEXT RINGS GROUP 
	{
		preffix='Mem',
		name='memperc',
		arg='',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=35,
		x=87.5,
		y=82,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	{
		preffix='Swap',
		name='swapperc',
		arg='',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=48,
		positionx=87.5,
		positiony=82,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	{
		preffix='Cache',
		name='cached',
		arg='',
		suffix='',
		font='Monospace',
		fontsize=10,
		radius=61,
		x=87,5,
		y=82,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	{
		preffix='Buff',
		name='buffers',
		arg='',
		suffix='',
		font='Monospace',
		fontsize=10,
		radius=74,
		x=87.5,
		y=82,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	-- SECOND TEXT RINGS GROUP
	{
		preffix='Cpu',
		name='cpu',
		arg='cpu0',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=61,
		x=87.5,
		y=235,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	{
		preffix='Core0',
		name='cpu',
		arg='cpu1',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=48,
		x=87.5,
		y=235,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},

	{
		preffix='Core1',
		name='cpu',
		arg='cpu2',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=35,
		x=87.5,
		y=235,
		fg_colour=0xffffff,
		fg_alpha=1,
		start=-90,
		angle_end=50,
		letterposition=0.5,
	},
	-- THIRD TEXT RINGS GROUP
	{
		preffix='FileSys',
		name='fs_used_perc',
		arg='/',
		suffix='%',
		font='Monospace',
		fontsize=10,
		radius=75,
		x=87.5,
		y=300,
		fg_colour=0xffffff,
		fg_alpha=1,
		angle_start=-90,
		angle_end=50,
		letterposition=0.5,
	},
}
					--[[END TEXT RINGS SETTINGS]]
require 'cairo'

function rgb_to_r_g_b(colour,alpha)
	return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

-- ----------------------------------------------------------------------
			--[[ START RING WIDGET ]]

function draw_ring(cr,t,pt)

	local xc, yc, ring_r, ring_w, sa, ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
	local bgc, bga, fgc, fga=pt['bg_colour'],pt['bg_alpha'],pt['fg_colour'],pt['fg_alpha']

	local angle_0=sa*(2*math.pi/360)-math.pi/2
	local angle_f=ea*(2*math.pi/360)-math.pi/2
	local t_arc=t*(angle_f-angle_0)
	-- Draw background ring
	cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
	cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
	cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND)
	cairo_set_line_width(cr,ring_w)
	cairo_stroke(cr)
	-- Draw indicator ring
	cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
	cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
	cairo_stroke(cr)
end

-- ----------------------------------------------------------------------

function conky_stats_rings()
	local function setup_rings(cr,pt)
		local str=''
		local value=0

		str=string.format('${%s %s}',pt['name'],pt['arg'])
		str=conky_parse(str)

		value=tonumber(str)
		pct=value/pt['max']

		draw_ring(cr,pct,pt)
	end
	-- Check that Conky has been running for at least 5s
	if conky_window==nil then return end
	local w,h=conky_window.width,conky_window.height
	local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, w, h)

	local cr=cairo_create(cs)

	local updates=conky_parse('${updates}')
	update_num=tonumber(updates)
	if update_num>5 then
		for i in pairs(rings_settings) do
			setup_rings(cr,rings_settings[i])
		end
	end
end

			--[[ END RING WIDGET ]]
-- ----------------------------------------------------------------------
			--[[ CIRCLTEXT WIDGET ]]

function draw_text(cr,pt)
	local xt,yt,text_r,text_w,ast,aet,let_pos=pt['x'],pt['y'],pt['radius'],pt['fontsize'],pt['angle_start'],pt['angle_end'],pt['letterposition']
	local fgc, fga=pt['fg_colour'],pt['fg_alpha']

	function addzero100(num)
		if tonumber(num) == nil then return end

			if tonumber(num) < 10 then
				return "  " .. num
			elseif tonumber(num) <100 then
				return " " .. num
		else
			return num
		end
	end

	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

	str = string.format('${%s %s}', name, arg)
	str = conky_parse(str)
	value = tonumber(str)

	if value == nil then
		text=(preffix .. str .. suffix) 
	else
		text=(preffix .. (addzero100(value)) .. suffix) 
	end

	local inum=string.len(text)
	range=ae
	deg=(aet-ast)/(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*(ast+(deg*(i-1))))+let_pos
		interval2=degrads*(ast+(deg*(i-1)))
		txs=0+text_r*(math.sin(interval))
		tys=0-text_r*(math.cos(interval))
		cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
		cairo_set_font_size (cr, text_w);
		cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
		cairo_move_to (cr, txs+xt, tys+yt);
		cairo_rotate (cr, interval2)
		cairo_show_text (cr, (texttable[i]))
		cairo_rotate (cr, -interval2)
	end
end

-- -----------------------------------------------------------------------

function conky_textes_rings()
	
	if conky_window == nil then return end
	local w,h=conky_window.width,conky_window.height
	local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual,w,h)

	local cr=cairo_create(cs)

	local updates=conky_parse('${updates}')
	update_num=tonumber(updates)
	if update_num>5 then
		for i in pairs(textes_settings) do
			--print ("i",i)
			draw_text(textes_settings[i])
		end
		--cairo_destroy(cr)
	end
end
			--[[ END CIRCLTEXT WIDGET ]]

Informaticien où Troll, j'ai choisis les deux!
MountyHall, la Terre des Trõlls

Hors ligne

#65 Le 22/07/2010, à 12:51

Vermouth

Re : Postez vos scripts Lua pour Conky !

Ligne 430:

draw_text(textes_settings[i])

draw_text prend 2 paramètres dont le premier est un cairo_context je suppose...


Android !
\_/°<

   coin coin...

Hors ligne

#66 Le 11/08/2010, à 14:28

Pacito

Re : Postez vos scripts Lua pour Conky !

Salut !
Conky et lua m'interresse mais je debute tout juste.

Sinon j'ai adapte un script lua pour avoir des compteurs (sur la ram, swap, etc) mais j'ai deux problemes :
   -> j ai place du texte a l interieur des rond via le .conkyrc. Est il possible de place le texte en absolu
       (car tout doit etre place a la main avec des espaces)

   -> et l affichage de la temperature plante (malgre l astuce de Fenouille84) : les trois derniers cercles clignotent
       par contre tout va bien quand je supprime le compteur de temperature

compteurs.png

settings_table = {
-- RAM
    {
        name='memperc',
        arg='perc',
        max=60,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0x003F95,
        fg_alpha=0.8,
        x=50, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=450
    },
-- SWAP
    {
        name='swapperc',
        arg='',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0x0AA300,
        fg_alpha=0.8,
        x=150, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },
-- CPU1
    {
        name='cpu',
        arg='cpu1',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0xFF7600,
        fg_alpha=0.8,
        x=250, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },
-- CPU2    
    {
        name='cpu',
        arg='cpu2',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0xFF7600,
        fg_alpha=0.8,
        x=350, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },
-- TEMPERATURE    
--[[    {
        name='exec',
        arg='hddtemp /dev/sda | cut -c 24-25',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0xC00000,
        fg_alpha=0.8,
        x=450, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },]]
-- PARTITION /    
    {
        name='fs_used_perc',
        arg='/',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0x7C008C,
        fg_alpha=0.8,
        x=550, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },
-- PARTITION /home    
        {
        name='fs_used_perc',
		arg='/home',
        max=100,
        bg_colour=0x000000,
        bg_alpha=0.2,
        fg_colour=0x590364,
        fg_alpha=0.8,
        x=650, y=50,
        radius=40,
        thickness=7,
        start_angle=0,
        end_angle=360
    },
}


require 'cairo'

function rgb_to_r_g_b(colour,alpha)
    return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end

function draw_ring(cr,t,pt)
    local w,h=conky_window.width,conky_window.height
    
    local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
    local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

    local angle_0=sa*(2*math.pi/360)-math.pi/2
    local angle_f=ea*(2*math.pi/360)-math.pi/2
    local t_arc=t*(angle_f-angle_0)

    -- Draw background ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
    cairo_set_line_width(cr,ring_w)
    cairo_stroke(cr)
    
    -- Draw indicator ring

    cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
    cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
    cairo_stroke(cr)        
end

function conky_compteurs()
    local function setup_rings(cr,pt)
        local str=''
        local value=0
        
        str=string.format('${%s %s}',pt['name'],pt['arg'])
        str=conky_parse(str)
        
        value=tonumber(str)
        pct=value/pt['max']
        
        draw_ring(cr,pct,pt)
    end

    if conky_window==nil then return end
    local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)
    
    local cr=cairo_create(cs)    
    
    local updates=conky_parse('${updates}')
    update_num=tonumber(updates)
    
    if update_num>5 then
        for i in pairs(settings_table) do
            setup_rings(cr,settings_table[i])
        end
    end
end

Merci !!!

Dernière modification par Pacito (Le 26/08/2010, à 13:07)

Hors ligne

#67 Le 11/08/2010, à 16:02

Fenouille84

Re : Postez vos scripts Lua pour Conky !

Pacito a écrit :

Est il possible de place le texte en absolu
       (car tout doit etre place a la main avec des espaces)

Essaye avec la variable goto :

${goto 150}Ton texte1 ${goto 320}texte n°2

Sinon pour la température, je ne sais pas... hmm

Dernière modification par Fenouille84 (Le 11/08/2010, à 16:03)


Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --

Hors ligne

#68 Le 11/08/2010, à 16:30

chepioq

Re : Postez vos scripts Lua pour Conky !

@Pacito
Peux tu nous mettre ton conkyrc, que je le teste aussi.


Tout est dans tout et réciproquement....

Hors ligne

#69 Le 11/08/2010, à 16:31

Pacito

Re : Postez vos scripts Lua pour Conky !

Les goto fonctionnent parfaitement !
J ai supprimer la temperature de mon conky pour l instant, ca me parait pas etre une information capitale.

Hors ligne

#70 Le 11/08/2010, à 17:48

wlourf

Re : Postez vos scripts Lua pour Conky !

Pacito a écrit :

-> j ai place du texte a l interieur des rond via le .conkyrc. Est il possible de place le texte en absolu
       (car tout doit etre place a la main avec des espaces)

Pacito, autre méthode en Lua pour placer ton texte :
au post 15 de ce topic, il y a un script Lua qui te permet de placer précisément le texte, mais il n'est pas multiligne. Il se configure de la même manière que les anneaux, avec des tables :

        {
        text=conky_parse("${time %H:%M}"),
        x=100,
        y=100,
        h_align="c", --c pour centre
        v_align="m", --m pour milieu
        colour={{0,0xFF0000,1}}, --1 table insérée dans une table : 0 = position pour le gradient (absent ici), couleur, opacité
        },

le bout de code ci-dessus affichera l'heure en rouge centré horizontalement et verticalement autour du point 100,100, donc pile-poil au milieu du cercle si son centre est le point 100,100.Après à toi de voir si c'est pas excessif comme méthode pour tes besoins !

Hors ligne

#71 Le 11/08/2010, à 18:04

Pacito

Re : Postez vos scripts Lua pour Conky !

Ok bah merci pour le code, se sera plus propre et le texte sera toujours centre (sinon ca depend de la taille du texte qui varie)
Donc je place tout ca dans settings_table

Hors ligne

#72 Le 11/08/2010, à 18:15

wlourf

Re : Postez vos scripts Lua pour Conky !

Pacito a écrit :

Ok bah merci pour le code, se sera plus propre et le texte sera toujours centre (sinon ca depend de la taille du texte qui varie)
Donc je place tout ca dans settings_table

Attention, il faut le placer dans setting table du script du post 15! pas dans le script des anneaux.
le plus simple, si tu n'est pas à l'aise en Lua c'est d'avoir un appel avec le script Anneaux comme tu dois le faire actuellement avec :

lua_load ~/scripts/rings.lua
lua_draw_hook_pre main_rings  --cet un exemple, utilise le nom réel de la fonction

et ajouter un appel vers le script Text qui sera dans un autre fichier

lua_load ~/scripts/text.lua
lua_draw_hook_post draw_text

Par la suite, tu pourras mettre les deux dans le même fichier

Hors ligne

#73 Le 11/08/2010, à 20:31

Pacito

Re : Postez vos scripts Lua pour Conky !

quand je ne charge que rings.lua, j obtiens ca en console, et ca fonctionne :

~$ conky
Conky: desktop window (1e000a9) is subwindow of root window (11a)
Conky: window type - override
Conky: drawing to created window (0x2e00001)
Conky: drawing to double buffer
Conky: llua_do_call: function conky_rings execution failed: /home/pacito/.conky/rings.lua:135: attempt to perform arithmetic on local 'value' (a nil value)
Conky: llua_do_call: function conky_rings execution failed: /home/pacito/.conky/rings.lua:135: attempt to perform arithmetic on local 'value' (a nil value)

quand j incere ;

# -- Lua Load -- #
lua_load ~/.conky/rings.lua
lua_draw_hook_pre rings

lua_load ~/.conky/load_text.lua
lua_draw_hook_post load_text

les anneaux arrivent en retard et il n y a pas de texte (apres TEXT c est vide : juste une ligne vide) et j ai des erreurs :

~$ conky
Conky: desktop window (1e000a9) is subwindow of root window (11a)
Conky: window type - override
Conky: drawing to created window (0x2e00001)
Conky: drawing to double buffer
Conky: llua_do_call: function conky_rings execution failed: /home/pacito/.conky/rings.lua:135: attempt to perform arithmetic on local 'value' (a nil value)
Conky: llua_do_call: function conky_rings execution failed: /home/pacito/.conky/rings.lua:135: attempt to perform arithmetic on local 'value' (a nil value)

mon load_text.lua

function conky_load_text()

text_settings = {
	{
        text=conky_parse("RAM"),
        x=50,
        y=50,
        h_align="c", --c pour centre
        v_align="m", --m pour milieu
        colour={{0,0xFF0000,1}}, --1 table insérée dans une table : 0 = position pour le gradient (absent ici), couleur, opacité
		bold=true,
     },   
}
end

pourtant j ai pas touche toute cette partie du script (je comprend pas encore ce qu il s y passe !!!)

Hors ligne

#74 Le 11/08/2010, à 21:55

wlourf

Re : Postez vos scripts Lua pour Conky !

Si, je crois que tu as mangé une partie de la fonction du texte, ça devrait être  (tout ce qu'il y a après "FIN DES PARAMETRES" avit disparu):

function conky_load_text()
	--DEBUT DES PARAMETRES
	text_settings = {
		{
		text=conky_parse("RAM"),
		x=50,
		y=50,
		h_align="c", --c pour centre
		v_align="m", --m pour milieu
		colour={{0,0xFF0000,1}}, --1 table insérée dans une table : 0 = position pour le gradient (absent ici), couleur, opacité
		bold=true,
		},   
	}
 
    
    
--------------FIN DES PARAMETERES----------------
    if conky_window == nil then return end
    if tonumber(conky_parse("$updates"))<3 then return end
       
    local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)

    for i,v in pairs(text_settings) do    
        cr = cairo_create (cs)
        display_text(v)
        cairo_destroy(cr)
    end
    
    cairo_surface_destroy(cs)

end

Les erreurs proviennent du script ring, d'ailleurs tu les as déjà quand tu appelles ce script tout seul (probablement une variable conky qui affiche #N/A par intermittence, ce qui devrait faire clignoter un anneau, "probablement" hein).

Tu peux aussi charger tes 2 fichiers sur une seule ligne

lua_load ~/.conky/rings.lua ~/.conky/load_text.lua

lua_draw_hook_pre lancera ta fonction avant l'exécution du conky
lua_draw_hook_post lancera ta fonction après l'exécution du conky, ce qui explique qu'il y ait un décalage dans l'affichage, tu ne peux actuellement pas avoir plusieurs lua_draw_hook_pre ou post dans un même conky ... enfin si tu peux, mais seul le dernier appelé fonctionnera.
Comme ça tu ne peux appeler que deux fonctions, pour en appeler plus il faudrait créer une fonction Lua qui appelle les autres fonctions.
Bon courage smile

Hors ligne

#75 Le 12/08/2010, à 14:00

Pacito

Re : Postez vos scripts Lua pour Conky !

J ai encore quelques reglages a peaufiner :

Quand j appelle load_text

# -- Lua Load -- #
lua_load ~/.conky/rings.lua ~/.conky/load_text.lua
lua_draw_hook_pre ring_stats
lua_draw_hook_post load_text

J obtiens cette erreur

Conky: llua_do_call: function conky_load_text execution failed: /home/pacito/.conky/load_text.lua:23:attempt to call global 'display_text' (a nil value)

Pour le script rings.lua j ai l erreur

Conky: llua_do_call: function conky_ring_stats execution failed: /home/pacito/.conky/rings.lua:88: attempt to perform arithmetic on local 'value' (a nil value)

qui renvoie a : pct=value/pt['max']
quand j utilise les anneaux pour afficher les heures, minutes, secondes pas de probleme
Par contre pour memperc, swapperc ou le cpu, j ai l erreur

name='cpu',
arg='cpu1',

Pourtant cpu et memtest renvoient bien un pourcentage et c est en indication dans le script de depart

Hors ligne