将这几天做的lua脚本和入到awesome脚本中。
目前缺点:可以获取天气信息,不过天气是文字形式的!
相关函数
------------------------regex-------------------------
function get_weather(con)
local s = "<current_conditions>.*<\/forecast_conditions>"
local i ,j = string.sub(con, string.find(con,s))
local s = "\"[a-z0-9A-Z%s:%%]*\""
local info
for word in string.gmatch(i, s) do
info = tostring(info).."\t"..tostring(word)
end
local i, j = string.gsub(info, "\"","")
local l = split(i,"\t")
return l
end
------------------------split-------------------------
function split(string, spt)
local find_index = 1
local spt_index = 1
local spt_arr = {}
while true do
local find_end = string.find(string, spt, find_index)
if not find_end then
spt_arr[spt_index] = string.sub(string, find_index, string.len(string))
break
end
spt_arr[spt_index] = string.sub(string, find_index, find_end - 1)
find_index = find_end + string.len(spt)
spt_index = spt_index + 1
end
return spt_arr
end
lua获取天气
昨天写了一个lua的天气脚本,主要是获取http://qq.ip138.com天气信息,基本功能都已实现,但是唯一不足之处,就是不能显示当前的天气及气温。所以今天在网上找了下这方面的资料,发现google天气API获得满足了这个需求,于是就有折腾了下。google API特点:当天气和气温是实时的,明后几天是温度区间。
上代码先
#!/usr/bin/lua5.1
local http = require("socket.http")
------------------------regex-------------------------
function get_weather(con)
local s = "<current_conditions>.*<\/forecast_conditions>"
local i ,j = string.sub(con, string.find(con,s))
local s = "\"[a-z0-9A-Z%s:%%]*\""
local info
for word in string.gmatch(i, s) do
info = tostring(info).."\t"..tostring(word)
end
local i, j = string.gsub(info, "\"","")
local l = split(i,"\t")
return l
end
------------------------split-------------------------
function split(string, spt)
local find_index = 1
local spt_index = 1
local spt_arr = {}
while true do
local find_end = string.find(string, spt, find_index)
if not find_end then
spt_arr[spt_index] = string.sub(string, find_index, string.len(string))
break
end
spt_arr[spt_index] = string.sub(string, find_index, find_end - 1)
find_index = find_end + string.len(spt)
spt_index = spt_index + 1
end
return spt_arr
end
其实开始是想做在awesome statbar显示天气的(字体图标的那种),现在终端获得天气已经写好!
明天再着手搞字体的转换问题!
#!/usr/bin/lua5.1
local http = require("socket.http")
------------------------split-------------------------
function get_weather(con)
local s = "<b>.*<br\/><br\/>"
local i ,j = string.sub(con, string.find(con,s))
local i, n = string.gsub(i, "<br\/><br\/><b>","\n")
local i, j = string.gsub(i, "<br\/>","\t")
local i, j = string.gsub(i, "<\/b>","")
local i, j = string.gsub(i, "<b>","")
local i, j = string.gsub(i, "℃","°C")
local i, j = string.gsub(i, "~","-")
-- print(i,n+1)--所有天气
local list_n = split(i, "\n")
local list_t = split(list_n[1],"\t")
return list_t
end
------------------------split-------------------------
function split(string, spt)
local find_index = 1
local spt_index = 1
local spt_arr = {}
while true do
local find_end = string.find(string, spt, find_index)
if not find_end then
spt_arr[spt_index] = string.sub(string, find_index, string.len(string))
break
end
spt_arr[spt_index] = string.sub(string, find_index, find_end - 1)
find_index = find_end + string.len(spt)
spt_index = spt_index + 1
end
return spt_arr
end
支持版本
awesome 3.4.5 以上
背景
今天突然想修改下awesome的系统时间显示,google了下,基本都是手册上所说!
格式%a %b %d, %H:%M
为awesome默认配置( 在/etc/xdg/awesome/rc.lua
中并没有这么书写而是
mytextclock = awful.widget.textclock({ align = "right" })
后面的格式和时间刷新省略了,默认刷新是60秒),看到%a %b %d, %H:%M
,让我想到了系统命令date
的参数,之前曾经处理过类似的格式显示,所以这次直接man date
,果然,其中的格式控制和上面完全吻合,猜想lua脚本中使用日期格式控制应该是调用系统命令date的格式控制。
具体代码
了解到之后就在rc.lua中修改
mytextclock = awful.widget.textclock({ align = "right" },"%x %X",1)
正如预期结果一样,时间显示为(01/26/11 17:13:48
)!看来lua语言还是调用底层的系统函数来实现日期时间的格式的。(lua也在偷懒)
statfs:
结构:
#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
参数:
`path`: 位于需要查询信息的文件系统的文件路径名。
`fd`: 位于需要查询信息的文件系统的文件描述词。
`buf`:以下结构体的指针变量,用于储存文件系统相关的信息
struct statfs {
long f_type; /* 文件系统类型 */
long f_bsize; /* 经过优化的传输块大小 */
long f_blocks; /* 文件系统数据块总数 */
long f_bfree; /* 可用块数 */
long f_bavail; /* 非超级用户可获取的块数 */
long f_files; /* 文件结点总数 */
long f_ffree; /* 可用文件结点数 */
fsid_t f_fsid; /* 文件系统标识 */
long f_namelen; /* 文件名的最大长度 */
};