diff --git a/Source/MusicAppMediaFix.spoon/init.lua b/Source/MusicAppMediaFix.spoon/init.lua index e0348885..de07f6bf 100644 --- a/Source/MusicAppMediaFix.spoon/init.lua +++ b/Source/MusicAppMediaFix.spoon/init.lua @@ -1,6 +1,7 @@ --- === MusicAppMediaFix === --- ---- Override macOS behaviour and send all media keys (play/prev/next) to Music.app +--- Override macOS behaviour and send all media keys (play/prev/next) to +--- the last active of a specified list of apps local obj = { __gc = true } --obj.__index = obj setmetatable(obj, obj) @@ -15,7 +16,14 @@ obj.author = "Matheus Salmi , Chris Jones obj.homepage = "https://github.com/Hammerspoon/Spoons" obj.license = "MIT - https://opensource.org/licenses/MIT" +--- MusicAppMediaFix.mediaApps +--- Variable +--- List of applications to control with the media keys +obj.mediaApps = { "Music" } + obj.eventtap = nil +obj.appWatcher = nil +obj.currentApp = nil -- Internal function used to find our location, so we know where to load files from local function script_path() @@ -25,7 +33,9 @@ end obj.spoonPath = script_path() function obj:init() + self.currentApp = self.mediaApps[1] self.eventtap = hs.eventtap.new({hs.eventtap.event.types.systemDefined}, self.mediaKeyCallback) + self.appWatcher = hs.application.watcher.new(self.appWatcherCallback) end function obj.mediaKeyCallback(event) @@ -38,12 +48,17 @@ function obj.mediaKeyCallback(event) -- handle action if data["down"] == false or data["repeat"] == true then + for i, app in pairs(obj.mediaApps) do + if app ~= obj.currentApp then + hs.osascript.applescript('tell application "' .. app .. '" to pause') + end + end if data["key"] == "PLAY" then - hs.applescript('tell application "Music" to playpause') + hs.applescript('tell application "' .. obj.currentApp .. '" to playpause') elseif data["key"] == "FAST" then - hs.applescript('tell application "Music" to next track') + hs.applescript('tell application "' .. obj.currentApp .. '" to next track') elseif data["key"] == "REWIND" then - hs.applescript('tell application "Music" to previous track') + hs.applescript('tell application "' .. obj.currentApp .. '" to previous track') end end @@ -51,6 +66,14 @@ function obj.mediaKeyCallback(event) return true, nil end +function obj.appWatcherCallback(appName, eventType, app) + if hs.fnutils.contains(obj.mediaApps, appName) + and (eventType == hs.application.watcher.activated) then + obj.currentApp = appName + print("Sending media key events to " .. appName) + end +end + --- MusicAppMediaFix:start() --- Method --- Starts the hs.eventtap that powers this Spoon @@ -64,6 +87,7 @@ function obj:start() if self.eventtap:isEnabled() ~= true then self.eventtap:start() end + self.appWatcher:start() return self end @@ -80,6 +104,7 @@ function obj:stop() if self.eventtap:isEnabled() then self.eventtap:stop() end + self.appWatcher:stop() return self end