回答到点子上了,十分感谢!!!!!!!!!!!!
你是如何得知xev程序的?玩了一个月的archlinux,第一次看到,是不是多泡泡本论坛就OK了,哈哈
我知道 xev 时这个论坛还没建起来呢……
不过现在既然它已经起来了就多泡泡呗 :-)
PS: 一个月太少啦,用久了你就会知道各种有趣的命令了 ^_^
离线
看了三天的lua中文手册,连猜带蒙的大概明白awful.button()这个函数是如何实现及其调用关系。
rc.lua文件
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly), 此部分如何调用的呢?
awesome启动时,在lua栈中注册了awful.button表,供lua语言调用。
代码主要位于button.c
button_class_setup(lua_State *L)
{
static const struct luaL_Reg button_methods[] = //lual_Reg是lua基本API,提供对userdate的操作服务
{
LUA_CLASS_METHODS(button)
{ "__call", luaA_button_new }, //注册__call 函数
{ NULL, NULL }
};
static const struct luaL_Reg button_meta[] =
{
LUA_OBJECT_META(button)
LUA_CLASS_META //注册metatable,包括__index和__newindex函数(luaclass.h定义)
{ NULL, NULL }
};
luaA_class_setup(L, &button_class, "button", NULL, //将注册函数关联至button表
(lua_class_allocator_t) button_new, NULL, NULL,
luaA_class_index_miss_property, luaA_class_newindex_miss_property,
button_methods, button_meta);
}
当rc.lua中调用awful.button(),直接调用awful.button.__index(metatable) ===> __index函数调用__call函数(button.mt实现__call函数)==> button.new
如下为各函数关系图
********************************Lua调用*******************************
button.lua
button.metetable = button.mt.metatable
button.mt.__call ----调用--- > button.new
******************Lua C 内存栈调用****************
awful.button
__index
__call (缺省)
参考资料:《lua中文手册》
知识点包括:1、Lua调用C函数
2、Metatables
3、表相关的Metamethod
感悟:Lua 博大精深,看懂一行代码不容易,要想彻底理解还是要靠一份详尽的手册
archlinux磨合中
离线
好有研究精神~
离线
向你老学习,哈哈,好了,这下我也不准备自己写rc.lua了,把你的代码下载下来改吧改吧得了
archlinux磨合中
离线
搞定了,真心感觉不错了,顺便定义了几个快捷键,哈哈,
PS:请两位推荐一款awesome下的截屏软件哈
archlinux磨合中
离线
搞定了,真心感觉不错了,顺便定义了几个快捷键,哈哈,
PS:请两位推荐一款awesome下的截屏软件哈
经典的scrot...
离线
简陋 scrot,简单 shutter,强大 gimp。
不过由于 archlinuxcn 源的调整,shutter 从源中删除了好可惜。
离线
背景真好看
learning Arch linux
离线
感谢楼主的代码 XD
离线