2017-06-15 4 views
1

Je voudrais séparer init.lua script utilisé dans Hammerspoon pour améliorer la lisibilité et la maintenance.Puis-je séparer `init.lua` de différents composants dans Hammerspoon?

Il se présente comme suit:

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

Et puis à l'intérieur init.lua I lirait ces fichiers et activerait l'observateur.

Cependant, il semble qu'il n'y ait pas de telle fonction définie (peut-être que je pourrais manquer, cependant). Est-il possible de séparer la logique comme ça dans Hammerspoon?

+0

Habituellement, vous le feriez avec 'require()' ou 'dofile()'. Vous ne savez pas si ceux-ci sont disponibles dans votre environnement. – Forivin

Répondre

3

Oui, vous pouvez le faire en utilisant require. Si vous mettez vos fichiers Lua dans ~/.hammerspoon/, vous pouvez les charger en utilisant require('modulename'). Par exemple, si vous avez les modules suivants:

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

Ensuite, vous pouvez les charger à partir ~/.hammerspoon/init.lua comme ceci:

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

Vous pouvez charger tous les modules Lua, tant qu'ils apparaissent au package.path. Pour voir les répertoires que vous pouvez utiliser, jetez un oeil à package.path setup file de HammerSpoon. Cela fait référence à Lua package.path par défaut, qui est défini dans luaconf.h.

Si vous souhaitez placer vos modules Lua dans un répertoire non inclus dans package.path, vous pouvez le faire en les ajoutant aux variables d'environnement LUA_PATH_5_3 ou LUA_PATH. Clause de non-responsabilité: J'ai reçu cette information du code source de Hammerspoon, mais je n'ai pas de Mac, donc je ne l'ai pas testé. Faites-moi savoir si cela ne fonctionne pas pour vous. :)

+0

Merci. Ça a marché. Semble que la valeur de retour de la fonction 'require' est une valeur booléenne. 'hs.alert.show (AppWatcher)' a montré 'true'. – Blaszard

+0

La valeur de retour est celle qui est renvoyée par le module. Il s'agira souvent d'une table contenant toutes les fonctions exportées par le module. Ce module particulier doit retourner true en cas de succès et false en cas d'échec, ou quelque chose comme ça. –