1

In my lua function, I can use:

arg='wlp1s0',

and then stuff works!

I want to change the argument to the output of

exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'

How do I get this to work, such that arg is set to the character string that is the return of the above command?

OK, here is the complete function:

settings_table = {
{
    name='fs_used_perc',
    arg='/',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xBA1B19,
    fg_alpha=0.8,
    x=180, y=25,
    radius=30,
    thickness=7,
    start_angle=140,
    end_angle=320
},


{
    name='battery_percent',
    arg='',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x3399FF,
    fg_alpha=0.8,
    x=170, y=32,
    radius=40,
    thickness=7,
    start_angle=130,
    end_angle=320
},
{
    name='memperc',
    arg='',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x24CE09,
    fg_alpha=0.8,
    x=160, y=42,
    radius=50,
    thickness=7,
    start_angle=130,
    end_angle=320
},
{
    name='cpu',
    arg='cpu0',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xCECE09,
    fg_alpha=0.8,
    x=150, y=52,
    radius=60,
    thickness=7,
    start_angle=124,
    end_angle=320
},
    {
    name='upspeedf',
    arg='wlp1s0',
max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0xCE4209,
    fg_alpha=0.8,
    x=143, y=60,
    radius=70,
    thickness=7,
    start_angle=124,
    end_angle=320
},
    {
    name='downspeedf',
arg='wlp1s0',
    max=100,
    bg_colour=0xffffff,
    bg_alpha=0.2,
    fg_colour=0x6209CE,
    fg_alpha=0.8,
    x=135, y=67,
    radius=80,
    thickness=7,
    start_angle=125,
    end_angle=320
},
}
-- Use these settings to define the origin and extent of your clock.
clock_r=65
-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.

clock_x=100
clock_y=150

show_seconds=true

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_clock_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 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

In the entry with name = 'upspeedf', there is an arg = 'wlp1s0'. Also with 'downsppedf'.

I want to change that to be automagically picked up by the output of the commandline which gives me the interface gateaay.

exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'

The function is called in the function conky_clock_rings(). I guess that should also have to be modified. Does this clarify my question?

Thanks again for all your time and attention!!

user3236841
  • 1,088
  • 1
  • 15
  • 39

1 Answers1

0

You must use the io library. If you want to run your command and pipe it to Lua, like this:

exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}' | lua program.lua

use something like this:

local input = io.read("*all")

If you want to call your pipeline from inside Lua, you can do:

local input = io.popen("exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'"):read("*all")

EDIT:

After having read your explanation, here is a way to do it:

local network_interface = io.popen("exec ip route get 8.8.8.8 | awk 'NR==1 {print $5}'"):read("*l")
settings_table = {
   ...,
   {
      name='upspeedf',
      arg=network_interface,
      ...
   },
   ...
}
catwell
  • 6,770
  • 1
  • 23
  • 21
  • Thanks again for the information! I am not sure that I am advanced enough to follow the answer, sorry. My settings is of the following form: – user3236841 Nov 27 '14 at 23:01
  • for i in pairs(settings_table) do setup_rings(cr,settings_table[i]) end So how do I pass the local input in there then? Thanks again! – user3236841 Nov 27 '14 at 23:09
  • I wanted to mention if that was not clear that I think I understand how to define the variable. What I do not quite get is how to pass the argument to settings_table in the call to setup_rings function. – user3236841 Nov 28 '14 at 02:33
  • Here is the setup_rings function, btw: function conky_clock_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 – user3236841 Nov 28 '14 at 02:34
  • Hmm, now I don't understand. What argument do you set to `wlp1s0` here? `cr`? – catwell Nov 28 '14 at 07:26
  • I have edited my function and call to provide more information. Hopefully, this will clarify the question. Thanks again for all the helpful suggestions!! – user3236841 Nov 28 '14 at 14:57
  • I have edited my answer. Hopefully this does what you want. Note that I used read("*l") this time to avoid having an extraneous "\n" at the end. – catwell Nov 28 '14 at 18:33
  • Great! This works. Just to clarify for the sake of other readers, the variable is defined outside the function. – user3236841 Nov 28 '14 at 18:59