diff --git a/ShaguTweaks-extras.toc b/ShaguTweaks-extras.toc index de03c56..afeca8b 100644 --- a/ShaguTweaks-extras.toc +++ b/ShaguTweaks-extras.toc @@ -22,4 +22,5 @@ main.lua # modules mods\chat-history.lua mods\macro-icons.lua +mods\macro-tweaks.lua mods\worldmap-reveal.lua diff --git a/mods/macro-tweaks.lua b/mods/macro-tweaks.lua new file mode 100644 index 0000000..6017823 --- /dev/null +++ b/mods/macro-tweaks.lua @@ -0,0 +1,65 @@ +local _G = ShaguTweaks.GetGlobalEnv() +local T = ShaguTweaks.T + +local module = ShaguTweaks:register({ + title = T["Macro Tweaks"], + description = T["Add /equip command to macros, remove #showtooltip from chat and hide macro commands from history."], + expansions = { ["vanilla"] = true, ["tbc"] = false }, + maintainer = "@shagu (GitHub)", + enabled = nil, +}) + +module.enable = function(self) + -- make sure #showtooltip inside macros won't be sent + local hookSendChatMessage = SendChatMessage + function _G.SendChatMessage(msg, ...) + if msg and string.find(msg, "^#showtooltip ") then return end + hookSendChatMessage(msg, unpack(arg)) + end + + -- do not write macro calls into chat input history + if not ChatFrameEditBox._AddHistoryLine then + local userinput + + ChatFrameEditBox._AddHistoryLine = ChatFrameEditBox.AddHistoryLine + ChatFrameEditBox.AddHistoryLine = function(self, text) + if not userinput and text and string.find(text, "^/run(.+)") then return end + if not userinput and string.find(text, "^/script(.+)") then return end + if not userinput and string.find(text, "^/cast(.+)") then return end + ChatFrameEditBox._AddHistoryLine(self, text) + end + + local OnEnter = ChatFrameEditBox:GetScript("OnEnterPressed") + ChatFrameEditBox:SetScript("OnEnterPressed", function(a1,a2,a3,a4) + userinput = true + OnEnter(a1,a2,a3,a4) + userinput = nil + end) + end + + -- add /use and /equip to the macro api: + -- https://wowwiki.fandom.com/wiki/Making_a_macro + -- supported arguments: + -- /use + -- /use + -- /use + _G.SLASH_EQUIP1 = "/equip" + _G.SLASH_EQUIP2 = "/use" + _G.SlashCmdList.EQUIP = function (msg) + if not msg or msg == "" then return end + local bag, slot, _ + if string.find(msg, "%d+%s+%d+") then + _, _, bag, slot = string.find(msg, "(%d+)%s+(%d+)") + elseif string.find(msg, "%d+") then + _, _, slot = string.find(msg, "(%d+)") + else + bag, slot = FindItem(msg) + end + + if bag and slot then + UseContainerItem(bag, slot) + elseif not bag and slot then + UseInventoryItem(slot) + end + end +end