Je lie une clé pour exécuter le script. Je dois activer la liaison uniquement lorsque la fenêtre Visual Studio Code est focalisée.
Je vois les fonctions des filtres Hammerspoon mais je ne comprends pas comment l'utiliser.
Nom de l'application: Code
hs.hotkey.bind({"ctrl"}, "b", function() local codeWindowFilter = hs.window.filter:setAppFilter('Code') codeWindowFilter:isAppAllowed("Code", function() mycode here end) end)
mais j'obtiens l'erreur tentative d'appeler une valeur nulle (méthode 'setAppFilter')
Est-ce le bon façon? Existe-t-il un moyen de mettre toutes les liaisons dans un filtre approuvé?
Merci d'avance
3 Réponses :
D'après la documentation ici ( http://www.hammerspoon.org /docs/hs.window.filter.html ):
Vous devez suivre cette structure:
local codeWindowFilter = hs.window.filter.new():setAppFilter('Code')
OU
Créer un nouveau filtre de fenêtre comme décrit ici:
Bien que vous puissiez personnaliser le filtre de fenêtre par défaut, il est généralement conseillé de faire vos personnalisations sur une copie locale via mywf = hs.window.filter.new (); le windowfilter par défaut peut potentiellement être utilisé dans plusieurs modules Hammerspoon et sa modification peut avoir des conséquences inattendues ...
Par conséquent, changez votre code comme suit:
local wf=hs.window.filter wf.default:setAppFilter('My IDE',{allowTitles=1})
La méthode .new () crée un nouveau filtre de fenêtre. Le: setAppFilter appelle une méthode sur le nouvel objet, puis retourne l'objet de filtre de fenêtre modifié.
Merci pour votre aide, mais j'ai un problème avec la prochaine étape. Comment utiliser le filtre? Si j'utilise code localWindowFilter = hs.window.filter.new (): setAppFilter ('Code') codeWindowFilter: isAppAllowed (hs.application: title (), function () mycode here end)
"mycode "n'est pas exécuté et il obtient une erreur. Mon objectif est d'activer le raccourci ou il contient du code uniquement si une fenêtre de l'application "Code" est focalisée
La solution finale est celle-là:
local frontmostApplication = hs.application.frontmostApplication() if frontmostApplication and frontmostApplication:name() == "Code" then {my code here} end
Vous pouvez filtrer une application comme celle-ci
wf_terminal = hs.window.filter.new{'Terminal','iTerm2'} for _, win in ipairs(wf_terminal:getWindows()) do if win ~= nil and string.find(win:title(), "nvim") then moveWindowToLeftHalf(win) win:focus() end end