2017-06-15 48 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,或類似的東西。 –

相關問題