在 awesomewm 工具提示中执行自定义命令
Execute custom command in awesomewm tooltip
我有一个简单的小部件来显示空闲内存:
myFreeMemory = awful.widget.watch('bash -c "free -h | awk \'/^Mem:/ {print }\'"', 1)
这一行产生一个数字。
我想为它创建一个运行自定义命令的工具提示:
local free_memory_tooltip = awful.tooltip
{
objects = { myFreeMemory },
timer_function = function()
return "free -h"
end,
font = "monaco 18",
timeout=0,
opacity=0.9,
bg="#000000",
fg="#ffffff",
align="top_left"
}
代替return "free -h"
,我应该放什么来执行这个命令和return文本输出?
最简单的解决方案可能是使用 return io.popen("free -h"):read("*a")
,但这会使用 io.popen
,这在 AwesomeWM 中是最好避免的。
最好的解决方案可能是自己为 /proc/meminfo
编写一个解析器。呸
中间解决方案如下所示:
local last_result = ""
local function my_timer_function()
local cmd = "free -h | awk '/^Mem:/ {print }'""
awful.spawn.easy_async_with_shell(cmd, function(result)
last_result = result
free_memory_tooltip:set_markup(last_result)
end)
return last_result
end
-- Call it once to initialise its state; otherwise you would get a brief flicker of empty text
my_timer_function()
我有一个简单的小部件来显示空闲内存:
myFreeMemory = awful.widget.watch('bash -c "free -h | awk \'/^Mem:/ {print }\'"', 1)
这一行产生一个数字。
我想为它创建一个运行自定义命令的工具提示:
local free_memory_tooltip = awful.tooltip
{
objects = { myFreeMemory },
timer_function = function()
return "free -h"
end,
font = "monaco 18",
timeout=0,
opacity=0.9,
bg="#000000",
fg="#ffffff",
align="top_left"
}
代替return "free -h"
,我应该放什么来执行这个命令和return文本输出?
最简单的解决方案可能是使用 return io.popen("free -h"):read("*a")
,但这会使用 io.popen
,这在 AwesomeWM 中是最好避免的。
最好的解决方案可能是自己为 /proc/meminfo
编写一个解析器。呸
中间解决方案如下所示:
local last_result = ""
local function my_timer_function()
local cmd = "free -h | awk '/^Mem:/ {print }'""
awful.spawn.easy_async_with_shell(cmd, function(result)
last_result = result
free_memory_tooltip:set_markup(last_result)
end)
return last_result
end
-- Call it once to initialise its state; otherwise you would get a brief flicker of empty text
my_timer_function()