• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

玩awesome学lua#autostart模块

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

随着一个桌面环境启动的同时启动一些必备的程序。诸如:输入法之类。很多地方这种实现叫做autostart,我也觉的很贴切。

aweome的wiki里有一段关于autostart纯lua实现的代码片段,为了简洁和便于使用,我将其改成了模块,添加了新的使用接口。

并添加到rc.lua

require("autostart")
autostart.run_once_list{
    "wmname LG3D",
    "fcitx",
    "clipit",
    "lanuchy",
    "guake -e ranger",
    "batti",
    "firefox",
    "amule",
}

 

下面是修改成模块的autostart.lua,放在~/.config/awesome/下面

基本的原理是遍历/proc下表示一个个进程目录,通过每个进程目录下cmdline去判断想要的程序是否已经启动,没有则执行相应的启动命令

这段程序涉及到不少lua的基础知识,简单总结下:

  • 模块的使用和创建以及模块内的可见性;
  • 协同程序实现的迭代器;
  • unpack的使用;
  • string.find /  string.gsub 的使用;
  • io模块的使用;

另外:lfs模块需要安装luafilesystem获得

 

require("lfs") 
module("autostart",package.seeall)
-- {{{ Run programm once
function processwalker()
   local function yieldprocess()
      for dir in lfs.dir("/proc") do
        -- All directories in /proc containing a number, represent a process
        if tonumber(dir) ~= nil then
          local f, err = io.open("/proc/"..dir.."/cmdline")
          if f then
            local cmdline = f:read("*all")
            f:close()
            if cmdline ~= "" then
              coroutine.yield(cmdline)
            end
          end
        end
      end
    end
    return coroutine.wrap(yieldprocess)
end

function run_once(process, cmd)
   assert(type(process) == "string")
   local regex_killer = {
      ["+"]  = "%+", ["-"] = "%-",
      ["*"]  = "%*", ["?"]  = "%?" }

   for p in processwalker() do
      if p:find(process:gsub("[-+?*]", regex_killer)) then
     return
      end
   end
   return awful.util.spawn_with_shell(cmd or process)
end

function run_once_list(list)
    parse(list,run_once)
end

function parse(list,fn)
    for k,v in ipairs(list)do
        if type(v) == "string" then
            v={v}
        end
        fn(unpack(v))
    end
end
--
-- Use the second argument, if the programm you wanna start, 
-- differs from the what you want to search.
--run_once("redshift", "nice -n19 redshift -l 51:14 -t 5700:4500")

 

 

 

 

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua代码规范发布时间:2022-07-22
下一篇:
cocos2dx-lua绑定之代码编辑器发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap