awesome 脚本中加入天气 2011-03-25

将这几天做的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通过google的天气api获得天气 2011-03-24

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

lua 获得天气信息 2011-03-23

其实开始是想做在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设置时间格式的问题! 2011-01-28

支持版本

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获得硬盘使用情况 模拟linux命令 df (2011.3.24修正) 2009-10-10

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;  /* 文件名的最大长度 */
};