用了一段时间的awesome感觉真的不错,但有两个小问题困扰我很久未能解决,就是电量显示与音量控制.清明小长假闲的没事,搞定了!汇报如下.
版本:awesome 3.5
电量显示部分代码:
--Create battery widget
battery_widget = wibox.widget.textbox()
battery_widget:set_align("right")
function batteryInfo(adapter)
spacer = " "
local fcur = io.open("/sys/class/power_supply/"..adapter.."/charge_now")
local fcap = io.open("/sys/class/power_supply/"..adapter.."/charge_full")
local fsta = io.open("/sys/class/power_supply/"..adapter.."/status")
local cur = fcur:read()
local cap = fcap:read()
local sta = fsta:read()
local battery = math.floor(cur * 100 / cap)
if sta:match("Charging") then
dir = "^"
battery = "A/C ("..battery..")"
elseif sta:match("Discharging") then
dir = "v"
if tonumber(battery) > 25 and tonumber(battery) < 75 then
battery = battery
elseif tonumber(battery) < 25 then
if tonumber(battery) < 10 then
naughty.notify({ title = "Battery Warning"
, text = "Battery low!"..spacer..battery.."%"..spacer.."left!"
, timeout = 5
, position = "top_right"
, fg = beautiful.fg_focus
, bg = beautiful.bg_focus
})
end
battery = battery
else
battery = battery
end
else
dir = "="
battery = "A/C"
end
battery_widget:set_markup(spacer.."Bat:"..spacer..dir..battery..dir..spacer)
fcur:close()
end
battery_timer = timer({timeout = 20})
battery_timer:connect_signal("timeout", function()
batteryInfo("BAT1")
end)
battery_timer:start()
local fsta = io.open("/sys/class/power_supply/AC/online")
然后在如下代码中修改:(没错就是battery_widget那一行),如果你还想同时搞定音量控制,顺手把volume_widget那一行也加上.
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(volume_widget)
right_layout:add(battery_widget)
right_layout:add(cpuwidget)
right_layout:add(memwidget)
right_layout:add(mytextclock)
right_layout:add(mylayoutbox[s])
至此,电量部分搞定.
下面是音量控制:
vim ~/.config/awesome/volume.lua
local wibox = require("wibox")
local awful = require("awful")
volume_widget = wibox.widget.textbox()
volume_widget:set_align("right")
function update_volume(widget)
local fd = io.popen("amixer sget Master")
local status = fd:read("*all")
fd:close()
local volume = tonumber(string.match(status, "(%d?%d?%d)%%")) / 100
-- volume = string.format("% 3d", volume)
status = string.match(status, "%[(o[^%]]*)%]")
-- starting colour
local sr, sg, sb = 0x3F, 0x3F, 0x3F
-- ending colour
local er, eg, eb = 0xDC, 0xDC, 0xCC
local ir = volume * (er - sr) + sr
local ig = volume * (eg - sg) + sg
local ib = volume * (eb - sb) + sb
interpol_colour = string.format("%.2x%.2x%.2x", ir, ig, ib)
if string.find(status, "on", 1, true) then
volume = " <span background='#" .. interpol_colour .. "'> </span>"
else
volume = " <span color='red' background='#" .. interpol_colour .. "'> M </span>"
end
widget:set_markup(volume)
end
update_volume(volume_widget)
mytimer = timer({ timeout = 1 })
mytimer:connect_signal("timeout", function () update_volume(volume_widget) end)
mytimer:start()
然后修改rc.lua
开头部分添加:local volume = require("volume")
再找到Key bindings部分:
-- {{{ Key bindings
globalkeys = awful.util.table.join(
--截屏快捷键
awful.key({ }, "Print", function ()
awful.util.spawn("scrot -e 'mv $f ~/shots/ 2>/dev/null'") end),
--音量控制
awful.key({ }, "XF86AudioRaiseVolume", function ()
awful.util.spawn("amixer set Master 9%+") end),
awful.key({ }, "XF86AudioLowerVolume", function ()
awful.util.spawn("amixer set Master 9%-") end),
awful.key({ }, "XF86AudioMute", function ()
awful.util.spawn("amixer sset Master toggle") end),
.........................
搞定收工!MOD+ctrol+r看看效果怎么样?
PS:操作前记得备份你的文件,以备不测.
PPS:贴张桌面截图献献丑
....................................
PPPS:新手请教怎么在本论坛贴图呢?
离线
离线
我也贴下我的:https://github.com/lilydjwg/myawesomerc 。另外有一篇老一点的文章:http://lilydjwg.is-programmer.com/2011/12/5/Awesome-volumn-widget.31160.html
离线
原来你就是口口,关注你的博客有段时间了;世界真的不大:)
顺便尊敬加膜拜一下:)
离线
试试这个图片能不能显示?
离线
纯粹测试,版主别喷我.
离线
离线
楼主厉害,最近在看awesome的语法,在rc.lua这段代码如何解释
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({ }, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
)
查看源代码库,awful.button()这个方法并没有实现哈,它是怎么能运行的。
awesome 3.5的说明文档不多,如何将widget显示在屏幕上呢?新手头大
参照文档
创建完cpuwidget对象后
mystatusbar = wibox({position = "bottom"})
mystatusbar.widgets =
{
cpuwidget
}
mystatusbar.sreen = 1
这个不能显示吗?
archlinux磨合中
离线
楼主厉害,最近在看awesome的语法,在rc.lua这段代码如何解释
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({ }, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
)
查看源代码库,awful.button()这个方法并没有实现哈,它是怎么能运行的。
awesome 3.5的说明文档不多,如何将widget显示在屏幕上呢?新手头大
参照文档
创建完cpuwidget对象后
mystatusbar = wibox({position = "bottom"})
mystatusbar.widgets =
{
cpuwidget
}
mystatusbar.sreen = 1
这个不能显示吗?
你可以参数我的配置: https://github.com/lilydjwg/myawesomerc
那个应该是 screen 吧?
离线
恩,谢谢百合仙子,正在参考,刚入手awesome, awesome3.5的示例代码就更少了。
【关键的问题】awesome 3.5的官方docapi是不是更新不及时,当示例中遇到不明白的用法时,需要看awesome的lua源码文件吧?
发现使用awesome并不如官方文档所说学习2小时的Lua语法就OK了,正在将《lua中文手册》再过一遍,不过lua的table真非常有趣哈。:)
archlinux磨合中
离线
恩,谢谢百合仙子,正在参考,刚入手awesome, awesome3.5的示例代码就更少了。
【关键的问题】awesome 3.5的官方docapi是不是更新不及时,当示例中遇到不明白的用法时,需要看awesome的lua源码文件吧?
发现使用awesome并不如官方文档所说学习2小时的Lua语法就OK了,正在将《lua中文手册》再过一遍,不过lua的table真非常有趣哈。:)
没有啊,我从来没去看源码,都是看自带的文档尝试的。不知道你说的 docapi 指的是哪里的?
另外,awesome 3.5 用 lua 5.2 了,《Lua中文手册》没更新的吧?
离线
楼主厉害,最近在看awesome的语法,在rc.lua这段代码如何解释
不好意思,楼主一点也不厉害,lua也不懂.我的方法就是官方wiki里搜索,找到2013年的配置文件,一点点试出来的.为什么要2013?
..............因为3.5版是2012.12发布的... 哈哈!
离线
嗯,楼上动手能力很强,我是一开始也打算和你一样,边尝试修改一下即可,但是不理解代码感觉修修补补不放心,awesome的api doc写的又太简单,于是一不小心就掉进rc.lua的代码坑里,钻到awesome源码堆里面去了,折腾三天了,现在总算有点感觉了。
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({ }, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
)
对于这段代码,定义的是button鼠标的行为
awful.button({ modkey }, 1, awful.client.movetotag),
第一个参数:{modkey}代表是否开启CapsLK和Num Lock
第二个参数:1……5分别对应鼠标的五个状态【猜测1=左键,2=右键,3=中键,4=上滚轮,5=下滚轮】
第三个参数:定义鼠标5个状态时的行为动作
极简同学,不知这样理解是否正确呢?
继续看代码
回百合仙子:
1、awesome doc api 是指 http://awesome.naquadah.org/doc/api/
2、【lua中文手册】是2005年的第二版
最近编辑记录 lijing48301243 (2013-04-20 20:28:02)
archlinux磨合中
离线
那个鼠标键对应的数字基本上是通用的啦(浏览器里要减一)。用 xev 程序可以看到的。2 是中键,3 是右键哦。
{modkey} 这个是修饰键啦,比如 Ctrl、Alt 什么的。字符串表示。
那个文档我没发现有什么不对的呀,就是太不详细了。
离线
回答到点子上了,十分感谢!!!!!!!!!!!!
你是如何得知xev程序的?玩了一个月的archlinux,第一次看到,是不是多泡泡本论坛就OK了,哈哈
archlinux磨合中
离线