2017-06-15 42 views
1

我想单独用于Hammerspoon的init.lua脚本以提高可读性和维护性。我可以将`init.lua`分离到Hammerspoon中的不同组件吗?

因此,它看起来像下面这样:

  • init.lua
  • AppWatcher.lua
  • WiFiWatcher.lua
  • KeyRemap.lua

然后从init.lua我内会读取这些文件并使观察者激活。

但是,似乎没有这样的函数定义(也许我可能会错过它,虽然)。是否有可能将Hammerspoon中的逻辑分开?

+0

通常你会用'require()'或'dofile()'来做。不确定这些在您的环境中是否可用。 – Forivin

回答

3

是的,你可以使用require来做到这一点。

如果你把你的Lua文件放在~/.hammerspoon/中,你可以使用require('modulename')加载它们。例如,如果您有以下模块:

  • ~/.hammerspoon/AppWatcher.lua
  • ~/.hammerspoon/WiFiWatcher.lua
  • ~/.hammerspoon/KeyRemap.lua

然后你可以从~/.hammerspoon/init.lua加载它们像这样:

local AppWatcher = require('AppWatcher') 
local WiFiWatcher = require('WiFiWatcher') 
local KeyRemap = require('KeyRemap') 

你可以只要它们出现,就加载任何Lua模块在package.path。要查看您可以使用的目录,请查看HammerSpoon的package.path setup file。这引用默认的Lua package.path,它在luaconf.h中定义。

如果要将Lua模块放入package.path中未包含的目录中,可以将它们添加到LUA_PATH_5_3LUA_PATH环境变量中。

声明:我从Hammerspoon源代码获得了这个信息,但是我没有Mac,所以我没有测试它。让我知道,如果它不适合你。 :)

+0

谢谢。有效。看起来'require'函数的返回值是一个布尔值。 'hs.alert.show(AppWatcher)'显示为'true'。 – Blaszard

+0

返回值是从模块返回的任何内容。通常它将是一个包含模块导出的所有功能的表格。这个特定的模块必须在成功时返回true,在失败时返回false,或类似的东西。 –

相关问题