您尚未登录。

#1 2013-04-07 09:13:49

极简主义
会员
注册时间: 2013-04-06
帖子: 64

终于搞定了awesome的电量与音量widget

用了一段时间的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:新手请教怎么在本论坛贴图呢?

离线

#2 2013-04-07 11:22:01

phoenixlzx
晩ご飯だよー
注册时间: 2011-08-19
帖子: 1,789
个人网站

Re: 终于搞定了awesome的电量与音量widget

只回答你最后一个问题好了。

上传到图床——比如微博图床,然后用 img 标签贴到这里。

离线

#3 2013-04-07 13:52:57

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,920
个人网站

Re: 终于搞定了awesome的电量与音量widget

我也贴下我的:https://github.com/lilydjwg/myawesomerc 。另外有一篇老一点的文章:http://lilydjwg.is-programmer.com/2011/12/5/Awesome-volumn-widget.31160.html

离线

#4 2013-04-07 18:37:03

极简主义
会员
注册时间: 2013-04-06
帖子: 64

Re: 终于搞定了awesome的电量与音量widget

原来你就是口口,关注你的博客有段时间了;世界真的不大:)
顺便尊敬加膜拜一下:)

离线

#5 2013-04-09 09:54:27

极简主义
会员
注册时间: 2013-04-06
帖子: 64

Re: 终于搞定了awesome的电量与音量widget

TpWetBEQ.png

试试这个图片能不能显示?

离线

#6 2013-04-09 09:57:07

极简主义
会员
注册时间: 2013-04-06
帖子: 64

Re: 终于搞定了awesome的电量与音量widget

TpWetBEQ.png

纯粹测试,版主别喷我.

离线

#7 2013-04-09 10:52:41

phoenixlzx
晩ご飯だよー
注册时间: 2011-08-19
帖子: 1,789
个人网站

Re: 终于搞定了awesome的电量与音量widget

看起来不错,有机会我在我的X201上也试试看awesome好了

话说12寸的屏幕合适用平铺嘛。。

离线

#8 2013-04-19 19:48:44

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

Re: 终于搞定了awesome的电量与音量widget

楼主厉害,最近在看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磨合中

离线

#9 2013-04-19 22:05:57

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,920
个人网站

Re: 终于搞定了awesome的电量与音量widget

lijing48301243 说:

楼主厉害,最近在看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 吧?

离线

#10 2013-04-20 14:02:42

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

Re: 终于搞定了awesome的电量与音量widget

恩,谢谢百合仙子,正在参考,刚入手awesome, awesome3.5的示例代码就更少了。
【关键的问题】awesome 3.5的官方docapi是不是更新不及时,当示例中遇到不明白的用法时,需要看awesome的lua源码文件吧?
发现使用awesome并不如官方文档所说学习2小时的Lua语法就OK了,正在将《lua中文手册》再过一遍,不过lua的table真非常有趣哈。:)


archlinux磨合中

离线

#11 2013-04-20 14:28:38

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,920
个人网站

Re: 终于搞定了awesome的电量与音量widget

lijing48301243 说:

恩,谢谢百合仙子,正在参考,刚入手awesome, awesome3.5的示例代码就更少了。
【关键的问题】awesome 3.5的官方docapi是不是更新不及时,当示例中遇到不明白的用法时,需要看awesome的lua源码文件吧?
发现使用awesome并不如官方文档所说学习2小时的Lua语法就OK了,正在将《lua中文手册》再过一遍,不过lua的table真非常有趣哈。:)

没有啊,我从来没去看源码,都是看自带的文档尝试的。不知道你说的 docapi 指的是哪里的?

另外,awesome 3.5 用 lua 5.2 了,《Lua中文手册》没更新的吧?

离线

#12 2013-04-20 19:06:14

极简主义
会员
注册时间: 2013-04-06
帖子: 64

Re: 终于搞定了awesome的电量与音量widget

lijing48301243 说:

楼主厉害,最近在看awesome的语法,在rc.lua这段代码如何解释

不好意思,楼主一点也不厉害,lua也不懂.我的方法就是官方wiki里搜索,找到2013年的配置文件,一点点试出来的.为什么要2013?
..............因为3.5版是2012.12发布的... 哈哈!

离线

#13 2013-04-20 20:24:11

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

Re: 终于搞定了awesome的电量与音量widget

嗯,楼上动手能力很强,我是一开始也打算和你一样,边尝试修改一下即可,但是不理解代码感觉修修补补不放心,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磨合中

离线

#14 2013-04-20 21:18:55

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,920
个人网站

Re: 终于搞定了awesome的电量与音量widget

那个鼠标键对应的数字基本上是通用的啦(浏览器里要减一)。用 xev 程序可以看到的。2 是中键,3 是右键哦。
{modkey} 这个是修饰键啦,比如 Ctrl、Alt 什么的。字符串表示。

那个文档我没发现有什么不对的呀,就是太不详细了。

离线

#15 2013-04-21 10:10:12

lijing48301243
会员
注册时间: 2013-04-14
帖子: 137

Re: 终于搞定了awesome的电量与音量widget

回答到点子上了,十分感谢!!!!!!!!!!!!
你是如何得知xev程序的?玩了一个月的archlinux,第一次看到,是不是多泡泡本论坛就OK了,哈哈


archlinux磨合中

离线

页脚