From f1b1a384d4af5ba0a695fd2f99974fca5e47b2d1 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 6 May 2025 22:00:50 +0200 Subject: [PATCH] Code format --- .luacheckrc | 6 +- .luarc.json | 12 +- Actions.lua | 756 +++++++++++++++++++++++------------------------ B64.lua | 66 ++--- KeybindSaver.lua | 51 +--- Main.lua | 10 +- stylua.toml | 13 +- 7 files changed, 440 insertions(+), 474 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index 8ae3496..7558575 120000 --- a/.luacheckrc +++ b/.luacheckrc @@ -1 +1,5 @@ -C:/Users/Administrator/Seafile/Games-WoW/Ruski/Interface/AddOns/ActionBarSaverReloaded/Meta/.luacheckrc \ No newline at end of file +globals = { "CykaPersistentData", "CreateFrame", "GetItemInfo" } +unused_args = false +max_line_length = 150 +exclude_files = { "Meta/" } +global = false \ No newline at end of file diff --git a/.luarc.json b/.luarc.json index 7f12382..6a49ab0 120000 --- a/.luarc.json +++ b/.luarc.json @@ -1 +1,11 @@ -C:/Users/Administrator/Seafile/Games-WoW/Ruski/Interface/AddOns/ActionBarSaverReloaded/Meta/.luarc.json \ No newline at end of file +{ + "workspace": { + "library": [ + "./Meta" + ] + }, + "diagnostics.disable": [ + "unused-local", + "unused-vararg" + ] +} diff --git a/Actions.lua b/Actions.lua index 1c7aaba..ed4d28e 100644 --- a/Actions.lua +++ b/Actions.lua @@ -1,268 +1,276 @@ local ADDON_LOADED, shared = ... local typeMap = { - spell = "S", - item = "I", - macro = "M", - companion = "C", - equipmentset = "E", - summonmount = "U" + spell = "S", + item = "I", + macro = "M", + companion = "C", + equipmentset = "E", + summonmount = "U", } local inverseTypeMap = { - S = "spell", - I = "item", - M = "macro", - C = "companion", - E = "equipmentset", - U = "summonmount" + S = "spell", + I = "item", + M = "macro", + C = "companion", + E = "equipmentset", + U = "summonmount", } local function PickupEquipmentSet(setName) - local setIndex = 0 + local setIndex = 0 - for i = 1, C_EquipmentSet.GetNumEquipmentSets() do - local sn = C_EquipmentSet.GetEquipmentSetInfo(i) + for i = 1, C_EquipmentSet.GetNumEquipmentSets() do + local sn = C_EquipmentSet.GetEquipmentSetInfo(i) - if sn == setName then - setIndex = i - end - end + if sn == setName then setIndex = i end + end - C_EquipmentSet.PickupEquipmentSet(setIndex) + C_EquipmentSet.PickupEquipmentSet(setIndex) end local pickupActionButton = { - item = PickupItem, - spell = PickupSpell, - macro = PickupMacro, - companion = PickupSpell, - equipmentset = PickupEquipmentSet, - summonmount = C_MountJournal.Pickup + item = PickupItem, + spell = PickupSpell, + macro = PickupMacro, + companion = PickupSpell, + equipmentset = PickupEquipmentSet, + summonmount = C_MountJournal.Pickup, } local function RestoreActionButton(self, index, actionButton) - if GetActionInfo(index) then - PickupAction(index) - ClearCursor() - end + if GetActionInfo(index) then + PickupAction(index) + ClearCursor() + end - if not actionButton then - return true, nil - end + if not actionButton then return true, nil end - local aliases = ActionBarSaverReloaded.spellAliases[actionButton.id] or {} - table.insert(aliases, actionButton.id) + local aliases = ActionBarSaverReloaded.spellAliases[actionButton.id] or {} + table.insert(aliases, actionButton.id) - for _, id in ipairs(aliases) do - pickupActionButton[actionButton.type](id) + for _, id in ipairs(aliases) do + pickupActionButton[actionButton.type](id) - if GetCursorInfo() == actionButton.type then - PlaceAction(index) - return true, id - end + if GetCursorInfo() == actionButton.type then + PlaceAction(index) + return true, id + end - ClearCursor() - end + ClearCursor() + end - return false + return false end -local function IsMacro(actionButton) - return actionButton and actionButton.type == "macro" -end +local function IsMacro(actionButton) return actionButton and actionButton.type == "macro" end local function GetMacroDuplicates() - local t = {} - local duplicates = {} + local t = {} + local duplicates = {} - for i = 1, MAX_MACROS do - local macroName = GetMacroInfo(i) + for i = 1, MAX_MACROS do + local macroName = GetMacroInfo(i) - if macroName then - if not t[macroName] then - t[macroName] = 1 - else - t[macroName] = t[macroName] + 1 - duplicates[macroName] = t[macroName] - end - end - end + if macroName then + if not t[macroName] then + t[macroName] = 1 + else + t[macroName] = t[macroName] + 1 + duplicates[macroName] = t[macroName] + end + end + end - return duplicates + return duplicates end local function AddWarning(warnings, macroName, usages) - table.insert(warnings, string.format("Warning: Found %d macros named '%s'. Consider renaming them to avoid issues", - usages, macroName)) + table.insert( + warnings, + string.format("Warning: Found %d macros named '%s'. Consider renaming them to avoid issues", usages, macroName) + ) end function SaveSet(setName) - if not setName or setName == "" then - print("Set name cannot be empty") - return - end + if not setName or setName == "" then + print("Set name cannot be empty") + return + end - local duplicates = GetMacroDuplicates() - local set = {} - local warnings = {} + local duplicates = GetMacroDuplicates() + local set = {} + local warnings = {} - for i = 1, MAX_ACTION_BUTTONS do - local type, id = GetActionInfo(i) + for i = 1, MAX_ACTION_BUTTONS do + local type, id = GetActionInfo(i) - if type == "macro" then - -- use macro name as the ID - id = GetMacroInfo(id) - if duplicates[id] then - AddWarning(warnings, id, duplicates[id]) - end - end + if type == "macro" then + -- use macro name as the ID + id = GetMacroInfo(id) + if duplicates[id] then AddWarning(warnings, id, duplicates[id]) end + end - if type and id then - set[i] = type and { - type = type, - id = id - } - end - end + if type and id then set[i] = type and { + type = type, + id = id, + } end + end - ActionBarSaverReloaded.sets[setName] = set - print(string.format("Saved set '%s'!", setName)) - for _, warning in ipairs(warnings) do - print(warning) - end + ActionBarSaverReloaded.sets[setName] = set + print(string.format("Saved set '%s'!", setName)) + for _, warning in ipairs(warnings) do + print(warning) + end end function RestoreSet(setName) - if not setName or setName == "" then - print("Set name cannot be empty") - return - end + if not setName or setName == "" then + print("Set name cannot be empty") + return + end - local set = ActionBarSaverReloaded.sets[setName] + local set = ActionBarSaverReloaded.sets[setName] - if not set then - print(string.format("No set with the name '%s' exists", setName)) - return - end - if InCombatLockdown() then - print("Cannot restore sets while in combat") - return - end + if not set then + print(string.format("No set with the name '%s' exists", setName)) + return + end + if InCombatLockdown() then + print("Cannot restore sets while in combat") + return + end - local duplicates = GetMacroDuplicates() - local messages = {} + local duplicates = GetMacroDuplicates() + local messages = {} - -- Start with an empty cursor - ClearCursor() + -- Start with an empty cursor + ClearCursor() - for i = 1, MAX_ACTION_BUTTONS do - local actionButton = set[i] + for i = 1, MAX_ACTION_BUTTONS do + local actionButton = set[i] - if IsMacro(actionButton) and duplicates[actionButton.id] then - AddWarning(messages, actionButton.id, duplicates[actionButton.id]) - end + if IsMacro(actionButton) and duplicates[actionButton.id] then + AddWarning(messages, actionButton.id, duplicates[actionButton.id]) + end - local succeeded, restoredID = RestoreActionButton(self, i, actionButton) - if not succeeded then - table.insert(messages, string.format("Error: Unable to restore %s with id [%s] to slot %d", - actionButton.type, actionButton.id or "", i)) - elseif actionButton and restoredID ~= actionButton.id then - table.insert(messages, - string.format("Info: Restored spell %d (%s) in place of spell %d", restoredID, GetSpellInfo(restoredID), - actionButton.id)) - end - end + local succeeded, restoredID = RestoreActionButton(self, i, actionButton) + if not succeeded then + table.insert( + messages, + string.format( + "Error: Unable to restore %s with id [%s] to slot %d", + actionButton.type, + actionButton.id or "", + i + ) + ) + elseif actionButton and restoredID ~= actionButton.id then + table.insert( + messages, + string.format( + "Info: Restored spell %d (%s) in place of spell %d", + restoredID, + GetSpellInfo(restoredID), + actionButton.id + ) + ) + end + end - print(string.format("Restored set '%s'", setName)) - for _, warning in ipairs(messages) do - print(warning) - end + print(string.format("Restored set '%s'", setName)) + for _, warning in ipairs(messages) do + print(warning) + end end function DeleteSet(setName) - if not setName or setName == "" then - print("Set name cannot be empty") - return - end + if not setName or setName == "" then + print("Set name cannot be empty") + return + end - if not ActionBarSaverReloaded.sets[setName] then - print(string.format("No set with the name '%s' exists", setName)) - return - end + if not ActionBarSaverReloaded.sets[setName] then + print(string.format("No set with the name '%s' exists", setName)) + return + end - ActionBarSaverReloaded.sets[setName] = nil + ActionBarSaverReloaded.sets[setName] = nil - print(string.format("Deleted set '%s'", setName)) + print(string.format("Deleted set '%s'", setName)) end function ListSets() - local sets = {} - for setName, foo in pairs(ActionBarSaverReloaded.sets) do - sets[#sets + 1] = setName - end - table.sort(sets) - local setsStr = table.concat(sets, ", ") + local sets = {} + for setName, foo in pairs(ActionBarSaverReloaded.sets) do + sets[#sets + 1] = setName + end + table.sort(sets) + local setsStr = table.concat(sets, ", ") - print(not (not setsStr or setsStr == "") and setsStr or "No sets found") + print(not (not setsStr or setsStr == "") and setsStr or "No sets found") end function AliasSpell(args) - if not args or args == "" then - print("Must provide args in the format 'spellID aliasID'") - return - end - local spellID, aliasID = string.match(args, "(%d+)%s+(%d+)") + if not args or args == "" then + print("Must provide args in the format 'spellID aliasID'") + return + end + local spellID, aliasID = string.match(args, "(%d+)%s+(%d+)") - spellID = tonumber(spellID) - aliasID = tonumber(aliasID) + spellID = tonumber(spellID) + aliasID = tonumber(aliasID) - if not (spellID and aliasID) then - print(string.format("Could not parse spellID and aliasID from '%s'", args)) - return - end + if not (spellID and aliasID) then + print(string.format("Could not parse spellID and aliasID from '%s'", args)) + return + end - local aliases = ActionBarSaverReloaded.spellAliases[spellID] or {} + local aliases = ActionBarSaverReloaded.spellAliases[spellID] or {} - for _, id in ipairs(aliases) do - if id == aliasID then - print(string.format("Spell %d is already aliased by %d", spellID, aliasID)) - return - end - end + for _, id in ipairs(aliases) do + if id == aliasID then + print(string.format("Spell %d is already aliased by %d", spellID, aliasID)) + return + end + end - table.insert(ActionBarSaverReloaded.spellAliases[spellID], aliasID) - print(string.format("Added %d as an alias for %d", aliasID, spellID)) + table.insert(ActionBarSaverReloaded.spellAliases[spellID], aliasID) + print(string.format("Added %d as an alias for %d", aliasID, spellID)) end function DeleteSpellAliases(spellID) - if not spellID or spellID == "" then - print("Must provide a valid spellID") - return - end + if not spellID or spellID == "" then + print("Must provide a valid spellID") + return + end - spellID = tonumber(spellID) + spellID = tonumber(spellID) - if not ActionBarSaverReloaded.spellAliases[spellID] then - print(string.format("No aliases to remove for spell with ID %d", spellID)) - return - end + if not ActionBarSaverReloaded.spellAliases[spellID] then + print(string.format("No aliases to remove for spell with ID %d", spellID)) + return + end - ActionBarSaverReloaded.spellAliases[spellID] = nil + ActionBarSaverReloaded.spellAliases[spellID] = nil - print(string.format("Removed all aliases for spell with ID %d", spellID)) + print(string.format("Removed all aliases for spell with ID %d", spellID)) end function ListAliases() - local aliases = ActionBarSaverReloaded.spellAliases + local aliases = ActionBarSaverReloaded.spellAliases - if Dict.isEmpty(aliases) then - print("No aliases found") - return - end + if Dict.isEmpty(aliases) then + print("No aliases found") + return + end - Dict.iter(ActionBarSaverReloaded.spellAliases, function(spellID, aliases) - print(string.format("Spell %d is aliased by: %s", spellID, table.concat(aliases, ", "))) - end) + Dict.iter( + ActionBarSaverReloaded.spellAliases, + function(spellID, aliases) + print(string.format("Spell %d is aliased by: %s", spellID, table.concat(aliases, ", "))) + end + ) end ---@param text string @@ -270,30 +278,26 @@ end ---@param deliminer string ---@return string[] local function Partition(text, size, deliminer) - local words = {} - for word in text:gmatch("[^" .. deliminer .. "]+") do - words[#words + 1] = word - end + local words = {} + for word in text:gmatch("[^" .. deliminer .. "]+") do + words[#words + 1] = word + end - local ret = {} - local currentChunk = "" + local ret = {} + local currentChunk = "" - for _, word in ipairs(words) do - if #currentChunk + #word + 1 <= size then - currentChunk = currentChunk .. deliminer .. word - else - if #currentChunk > 0 then - ret[#ret + 1] = currentChunk - end - currentChunk = word - end - end + for _, word in ipairs(words) do + if #currentChunk + #word + 1 <= size then + currentChunk = currentChunk .. deliminer .. word + else + if #currentChunk > 0 then ret[#ret + 1] = currentChunk end + currentChunk = word + end + end - if #currentChunk > 0 then - ret[#ret + 1] = currentChunk - end + if #currentChunk > 0 then ret[#ret + 1] = currentChunk end - return ret + return ret end local importingSet = nil @@ -305,17 +309,17 @@ importExportFrame:EnableMouse(true) importExportFrame:SetMovable(true) importExportFrame:SetResizable(false) importExportFrame:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 4, - edgeSize = 4, - insets = { - left = 4, - right = 4, - top = 4, - bottom = 4 - } + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 4, + edgeSize = 4, + insets = { + left = 4, + right = 4, + top = 4, + bottom = 4, + }, }) importExportFrame:SetBackdropColor(0, 0, 0, 0.8) importExportFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) @@ -323,15 +327,9 @@ importExportFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) importExportFrame:SetMovable(true) importExportFrame:EnableMouse(true) importExportFrame:RegisterForDrag("LeftButton") -importExportFrame:SetScript("OnDragStart", function(self) - self:StartMoving() -end) -importExportFrame:SetScript("OnDragStop", function(self) - self:StopMovingOrSizing() -end) -importExportFrame:SetScript("OnShow", function(self) - self:SetScale(1) -end) +importExportFrame:SetScript("OnDragStart", function(self) self:StartMoving() end) +importExportFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) +importExportFrame:SetScript("OnShow", function(self) self:SetScale(1) end) importExportFrame:Hide() local importExportFrameTextBox = CreateFrame("EditBox", "ABSImportExportFrameTextBox", importExportFrame) @@ -344,207 +342,179 @@ importExportFrameTextBox:SetMultiLine(true) importExportFrameTextBox:SetAutoFocus(true) importExportFrameTextBox:SetMaxLetters(1000000) importExportFrameTextBox:SetScript("OnEscapePressed", function(self) - importExportFrame:Hide() - if importingSet then - local lines = {strsplit("\n", self:GetText())} - for _, line in ipairs(lines) do - line = strtrim(line) - if line ~= "" then - ImportSet(importingSet, line) - end - end - importingSet = nil - end + importExportFrame:Hide() + if importingSet then + local lines = { strsplit("\n", self:GetText()) } + for _, line in ipairs(lines) do + line = strtrim(line) + if line ~= "" then ImportSet(importingSet, line) end + end + importingSet = nil + end end) function ExportSet(setName) - local set = ActionBarSaverReloaded.sets[setName] - if not set then - print(string.format("No set with the name '%s' exists", setName)) - return - end - local macros = {} - local stringified = {} - for slot, action in pairs(set) do - local typeChar = typeMap[action.type] - if not typeChar then - print(string.format("Unknown action type '%s' in set '%s'", action.type, setName)) - return - end - stringified[#stringified + 1] = string.format("%s\\%s\\%s", tostring(slot), tostring(action.id), - tostring(typeChar)) - if typeChar == "M" then - local _, _, macro = GetMacroInfo(action.id) - if macro then - macros[action.id] = macro - end - end - end + local set = ActionBarSaverReloaded.sets[setName] + if not set then + print(string.format("No set with the name '%s' exists", setName)) + return + end + local macros = {} + local stringified = {} + for slot, action in pairs(set) do + local typeChar = typeMap[action.type] + if not typeChar then + print(string.format("Unknown action type '%s' in set '%s'", action.type, setName)) + return + end + stringified[#stringified + 1] = + string.format("%s\\%s\\%s", tostring(slot), tostring(action.id), tostring(typeChar)) + if typeChar == "M" then + local _, _, macro = GetMacroInfo(action.id) + if macro then macros[action.id] = macro end + end + end - local export = {} - for name, macro in pairs(macros) do - local content = B64.Encode(macro) - export[#export + 1] = string.format("Mž%sž%s", name, content) - end - export[#export + 1] = table.concat(stringified, "ž") - local str = table.concat(export, "\n") - importExportFrame:Show() - importExportFrameTextBox:SetText(str) - importExportFrameTextBox:SetFocus() + local export = {} + for name, macro in pairs(macros) do + local content = B64.Encode(macro) + export[#export + 1] = string.format("Mž%sž%s", name, content) + end + export[#export + 1] = table.concat(stringified, "ž") + local str = table.concat(export, "\n") + importExportFrame:Show() + importExportFrameTextBox:SetText(str) + importExportFrameTextBox:SetFocus() end function ParseAction(action) - if not action or action == "" then - return nil - end - action = strtrim(action) - local slot, id, typeChar = string.match(action, "([^\\]+)\\([^\\]+)\\([^\\]+)") - if not typeChar then - print(string.format("Unknown action type '%s' in set '%s'", tostring(typeChar), tostring(setName))) - return - end - local type = inverseTypeMap[typeChar] - if not type then - print(string.format("Unknown action type '%s' in set '%s'", tostring(typeChar), tostring(setName))) - return - end + if not action or action == "" then return nil end + action = strtrim(action) + local slot, id, typeChar = string.match(action, "([^\\]+)\\([^\\]+)\\([^\\]+)") + if not typeChar then + print(string.format("Unknown action type '%s' in set '%s'", tostring(typeChar), tostring(setName))) + return + end + local type = inverseTypeMap[typeChar] + if not type then + print(string.format("Unknown action type '%s' in set '%s'", tostring(typeChar), tostring(setName))) + return + end - slot = tonumber(slot) + slot = tonumber(slot) - if not slot then - print(string.format("Unknown slot '%s' in set '%s'", tostring(slot), tostring(setName))) - return - end + if not slot then + print(string.format("Unknown slot '%s' in set '%s'", tostring(slot), tostring(setName))) + return + end - if not id then - print(string.format("Unknown id '%s' in set '%s'", tostring(id), tostring(setName))) - return - end + if not id then + print(string.format("Unknown id '%s' in set '%s'", tostring(id), tostring(setName))) + return + end - return { - slot = slot, - id = id, - type = type - } + return { + slot = slot, + id = id, + type = type, + } end function ImportMacro(importString) - if not importString or importString == "" then - print("Must provide a valid macro string") - return - end - importString = strtrim(importString) - local name, content = string.match(importString, "^Mž([^ž]+)ž([^ž]+)") - if not name or not content then - print("Error: Invalid macro part format") - return - end - content = strtrim(content) - name = strtrim(name) + if not importString or importString == "" then + print("Must provide a valid macro string") + return + end + importString = strtrim(importString) + local name, content = string.match(importString, "^Mž([^ž]+)ž([^ž]+)") + if not name or not content then + print("Error: Invalid macro part format") + return + end + content = strtrim(content) + name = strtrim(name) - local reconstructed = B64.Decode(content) - local macroIdx = GetMacroIndexByName(name) - if macroIdx == 0 then - macroIdx = CreateMacro(name, "Inv_misc_questionmark", "") - macroIdx = GetMacroIndexByName(name) - end - EditMacro(macroIdx, name, nil, reconstructed) - print(string.format("Imported macro '%s' with index %d and content '%s'", name, macroIdx, reconstructed)) - return + local reconstructed = B64.Decode(content) + local macroIdx = GetMacroIndexByName(name) + if macroIdx == 0 then + macroIdx = CreateMacro(name, "Inv_misc_questionmark", "") + macroIdx = GetMacroIndexByName(name) + end + EditMacro(macroIdx, name, nil, reconstructed) + print(string.format("Imported macro '%s' with index %d and content '%s'", name, macroIdx, reconstructed)) + return end function ImportSet(setName, str) - if not setName or setName == "" then - print("Must provide a valid set name") - return - end + if not setName or setName == "" then + print("Must provide a valid set name") + return + end - if string.find(str, "^Mž") then - ImportMacro(str) - return - end - local set = ActionBarSaverReloaded.sets[setName] or {} - -- if set then - -- print(string.format("Set '%s' already exists", setName)) - -- return - -- end + if string.find(str, "^Mž") then + ImportMacro(str) + return + end + local set = ActionBarSaverReloaded.sets[setName] or {} + -- if set then + -- print(string.format("Set '%s' already exists", setName)) + -- return + -- end - str = strtrim(str) - local data = {strsplit("ž", str)} - for _, action in ipairs(data) do - local paction = ParseAction(action) - if paction then - set[paction.slot] = { - type = paction.type, - id = paction.id - } - end - end + str = strtrim(str) + local data = { strsplit("ž", str) } + for _, action in ipairs(data) do + local paction = ParseAction(action) + if paction then set[paction.slot] = { + type = paction.type, + id = paction.id, + } end + end - -- /dump ActionBarSaverReloaded.sets["havoc"] - -- /dump ActionBarSaverReloaded.sets["havoc2"] - ActionBarSaverReloaded.sets[setName] = set - print(string.format("Imported set '%s'", setName)) + -- /dump ActionBarSaverReloaded.sets["havoc"] + -- /dump ActionBarSaverReloaded.sets["havoc2"] + ActionBarSaverReloaded.sets[setName] = set + print(string.format("Imported set '%s'", setName)) end function ImportSetDialogue(setName) - if not setName or setName == "" then - print("Must provide a valid set name") - return - end - importingSet = setName - importExportFrameTextBox:SetText("") - importExportFrame:Show() - importExportFrameTextBox:SetFocus() + if not setName or setName == "" then + print("Must provide a valid set name") + return + end + importingSet = setName + importExportFrameTextBox:SetText("") + importExportFrame:Show() + importExportFrameTextBox:SetFocus() end function PrintUsage() - print("ABS Slash commands") - print("/abs save - Saves your current action bar setup under the given ") - print("/abs restore - Restores the saved ") - print("/abs delete - Deletes the saved ") - print("/abs list - Lists all saved sets") - print("/abs alias - Adds an alias with to ") - print("/abs unalias - Removes all aliases associated with ") - print("/abs aliases - List all spell aliases") - print("/abs export - Brings up a dialog to export the given ") - print("/abs import - Brings up a dialog to import the given ") + print("ABS Slash commands") + print("/abs save - Saves your current action bar setup under the given ") + print("/abs restore - Restores the saved ") + print("/abs delete - Deletes the saved ") + print("/abs list - Lists all saved sets") + print("/abs alias - Adds an alias with to ") + print("/abs unalias - Removes all aliases associated with ") + print("/abs aliases - List all spell aliases") + print("/abs export - Brings up a dialog to export the given ") + print("/abs import - Brings up a dialog to import the given ") end SlashCmdList["ABS"] = function(argv) - local args = {strsplit(" ", argv)} - local cmd = args[1] + local args = { strsplit(" ", argv) } + local cmd = args[1] - if cmd == "save" then - SaveSet(args[2]) - end - if cmd == "restore" then - RestoreSet(args[2]) - end - if cmd == "delete" then - DeleteSet(args[2]) - end - if cmd == "list" then - ListSets() - end - if cmd == "alias" then - AliasSpell(args[2], args[3]) - end - if cmd == "unalias" then - DeleteSpellAliases(args[2]) - end - if cmd == "aliases" then - ListAliases() - end - if cmd == "export" then - ExportSet(args[2]) - end - if cmd == "import" then - ImportSetDialogue(args[2]) - end + if cmd == "save" then SaveSet(args[2]) end + if cmd == "restore" then RestoreSet(args[2]) end + if cmd == "delete" then DeleteSet(args[2]) end + if cmd == "list" then ListSets() end + if cmd == "alias" then AliasSpell(args[2], args[3]) end + if cmd == "unalias" then DeleteSpellAliases(args[2]) end + if cmd == "aliases" then ListAliases() end + if cmd == "export" then ExportSet(args[2]) end + if cmd == "import" then ImportSetDialogue(args[2]) end - if cmd == "" or not cmd then - PrintUsage() - end + if cmd == "" or not cmd then PrintUsage() end end SLASH_ABS1 = "/abs" diff --git a/B64.lua b/B64.lua index eb2a378..afbd2a7 100644 --- a/B64.lua +++ b/B64.lua @@ -1,46 +1,42 @@ -if not B64 then - B64 = {} -end +if not B64 then B64 = {} end local encode, decode = {}, { - [strbyte("=")] = false + [strbyte("=")] = false, } for value = 0, 63 do - local char = strsub('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', value + 1, value + 1) - encode[value] = char - decode[strbyte(char)] = value + local char = strsub("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", value + 1, value + 1) + encode[value] = char + decode[strbyte(char)] = value end local t = {} function B64.Encode(str) - local j = 1 - for i = 1, strlen(str), 3 do - local a, b, c = strbyte(str, i, i + 2) - t[j] = encode[bit.rshift(a, 2)] - t[j + 1] = encode[bit.band(bit.lshift(a, 4) + bit.rshift(b or 0, 4), 0x3F)] - t[j + 2] = b and encode[bit.band(bit.lshift(b, 2) + bit.rshift(c or 0, 6), 0x3F)] or "=" - t[j + 3] = c and encode[bit.band(c, 0x3F)] or "=" - j = j + 4 - end - return table.concat(t, "", 1, j - 1) + local j = 1 + for i = 1, strlen(str), 3 do + local a, b, c = strbyte(str, i, i + 2) + t[j] = encode[bit.rshift(a, 2)] + t[j + 1] = encode[bit.band(bit.lshift(a, 4) + bit.rshift(b or 0, 4), 0x3F)] + t[j + 2] = b and encode[bit.band(bit.lshift(b, 2) + bit.rshift(c or 0, 6), 0x3F)] or "=" + t[j + 3] = c and encode[bit.band(c, 0x3F)] or "=" + j = j + 4 + end + return table.concat(t, "", 1, j - 1) end function B64.Decode(str) - local j = 1 - if strlen(str) % 4 ~= 0 then - str = str .. string.rep("=", 4 - strlen(str) % 4) - end - assert(strlen(str) % 4 == 0, format("invalid data length: %d", strlen(str))) - for i = 1, strlen(str), 4 do - local ba, bb, bc, bd = strbyte(str, i, i + 3) - local a, b, c, d = decode[ba], decode[bb], decode[bc], decode[bd] - assert(a ~= nil, format("invalid data at position %d: '%s'", i, ba)) - assert(b ~= nil, format("invalid data at position %d: '%s'", i + 1, bb)) - assert(c ~= nil, format("invalid data at position %d: '%s'", i + 2, bc)) - assert(d ~= nil, format("invalid data at position %d: '%s'", i + 3, bd)) - t[j] = strchar(bit.lshift(a, 2) + bit.rshift(b, 4)) - t[j + 1] = c and strchar(bit.band(bit.lshift(b, 4) + bit.rshift(c, 2), 0xFF)) or "" - t[j + 2] = d and strchar(bit.band(bit.lshift(c, 6) + d, 0xFF)) or "" - j = j + 3 - end - return table.concat(t, "", 1, j - 1) + local j = 1 + if strlen(str) % 4 ~= 0 then str = str .. string.rep("=", 4 - strlen(str) % 4) end + assert(strlen(str) % 4 == 0, format("invalid data length: %d", strlen(str))) + for i = 1, strlen(str), 4 do + local ba, bb, bc, bd = strbyte(str, i, i + 3) + local a, b, c, d = decode[ba], decode[bb], decode[bc], decode[bd] + assert(a ~= nil, format("invalid data at position %d: '%s'", i, ba)) + assert(b ~= nil, format("invalid data at position %d: '%s'", i + 1, bb)) + assert(c ~= nil, format("invalid data at position %d: '%s'", i + 2, bc)) + assert(d ~= nil, format("invalid data at position %d: '%s'", i + 3, bd)) + t[j] = strchar(bit.lshift(a, 2) + bit.rshift(b, 4)) + t[j + 1] = c and strchar(bit.band(bit.lshift(b, 4) + bit.rshift(c, 2), 0xFF)) or "" + t[j + 2] = d and strchar(bit.band(bit.lshift(c, 6) + d, 0xFF)) or "" + j = j + 3 + end + return table.concat(t, "", 1, j - 1) end diff --git a/KeybindSaver.lua b/KeybindSaver.lua index 4d1263d..667c420 100644 --- a/KeybindSaver.lua +++ b/KeybindSaver.lua @@ -4,9 +4,7 @@ local ADDON_NAME, shared = ... local frame = CreateFrame("Frame") frame:RegisterEvent("ADDON_LOADED") frame:SetScript("OnEvent", function(self, event, addon) - if addon ~= ADDON_NAME then - return - end + if addon ~= ADDON_NAME then return end KeybindSaverReloaded = KeybindSaverReloaded or {} KeybindSaverReloaded.sets = KeybindSaverReloaded.sets or {} @@ -39,15 +37,9 @@ importExportFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) importExportFrame:SetMovable(true) importExportFrame:EnableMouse(true) importExportFrame:RegisterForDrag("LeftButton") -importExportFrame:SetScript("OnDragStart", function(self) - self:StartMoving() -end) -importExportFrame:SetScript("OnDragStop", function(self) - self:StopMovingOrSizing() -end) -importExportFrame:SetScript("OnShow", function(self) - self:SetScale(1) -end) +importExportFrame:SetScript("OnDragStart", function(self) self:StartMoving() end) +importExportFrame:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end) +importExportFrame:SetScript("OnShow", function(self) self:SetScale(1) end) importExportFrame:Hide() local importingSet = nil @@ -64,14 +56,11 @@ importExportFrameTextBox:SetScript("OnEscapePressed", function(self) importExportFrame:Hide() if importingSet then local text = self:GetText() - if text and text ~= "" then - ImportSet(importingSet, text) - end + if text and text ~= "" then ImportSet(importingSet, text) end importingSet = nil end end) - local function SaveSet(setName) if not setName or setName == "" then print("Set name cannot be empty") @@ -83,12 +72,10 @@ local function SaveSet(setName) for i = 1, numBindings do local command, category, key1, key2 = GetBinding(i) - if key1 or key2 then - set[command] = { - key1 = key1, - key2 = key2, - } - end + if key1 or key2 then set[command] = { + key1 = key1, + key2 = key2, + } end end KeybindSaverReloaded.sets[setName] = set @@ -112,12 +99,8 @@ local function RestoreSet(setName) -- Restore saved bindings for command, keys in pairs(set) do - if keys.key1 then - SetBinding(keys.key1, command) - end - if keys.key2 then - SetBinding(keys.key2, command) - end + if keys.key1 then SetBinding(keys.key1, command) end + if keys.key2 then SetBinding(keys.key2, command) end end -- Save the changes @@ -164,12 +147,8 @@ local function ExportSet(setName) local export = {} for command, keys in pairs(set) do - if keys.key1 then - table.insert(export, string.format("%s:%s", command, keys.key1)) - end - if keys.key2 then - table.insert(export, string.format("%s:%s", command, keys.key2)) - end + if keys.key1 then table.insert(export, string.format("%s:%s", command, keys.key1)) end + if keys.key2 then table.insert(export, string.format("%s:%s", command, keys.key2)) end end local exportStr = table.concat(export, "\n") @@ -190,9 +169,7 @@ local function ImportSet(setName, importStr) for _, line in ipairs(lines) do local command, key = strsplit(":", line) if command and key then - if not set[command] then - set[command] = {} - end + if not set[command] then set[command] = {} end if not set[command].key1 then set[command].key1 = key else diff --git a/Main.lua b/Main.lua index 121474d..06b7e65 100644 --- a/Main.lua +++ b/Main.lua @@ -3,13 +3,11 @@ local ADDON_NAME, shared = ... local frame = CreateFrame("Frame") frame:RegisterEvent("ADDON_LOADED") frame:SetScript("OnEvent", function(self, event, addon) - if addon ~= ADDON_NAME then - return - end + if addon ~= ADDON_NAME then return end - ActionBarSaverReloaded = ActionBarSaverReloaded or {} - ActionBarSaverReloaded.spellAliases = ActionBarSaverReloaded.spellAliases or {} - ActionBarSaverReloaded.sets = ActionBarSaverReloaded.sets or {} + ActionBarSaverReloaded = ActionBarSaverReloaded or {} + ActionBarSaverReloaded.spellAliases = ActionBarSaverReloaded.spellAliases or {} + ActionBarSaverReloaded.sets = ActionBarSaverReloaded.sets or {} end) -- function ABS:OnInitialize() diff --git a/stylua.toml b/stylua.toml index d4b9e04..02496d9 120000 --- a/stylua.toml +++ b/stylua.toml @@ -1 +1,12 @@ -C:/Users/Administrator/Seafile/Games-WoW/Ruski/Interface/AddOns/ActionBarSaverReloaded/Meta/stylua.toml \ No newline at end of file +syntax = "All" # Specify a disambiguation for the style of Lua syntax being formatted. Possible options: All (default), Lua51, Lua52, Lua53, Lua54, LuaJIT, Luau, CfxLua +column_width = 120 # Approximate line length for printing. Used as a guide for line wrapping - this is not a hard requirement: lines may fall under or over the limit. +line_endings = "Windows" # Line endings type. Possible options: Unix (LF) or Windows (CRLF) +indent_type = "Tabs" # Indent type. Possible options: Tabs or Spaces +indent_width = 4 # Character size of single indentation. If indent_type is set to Tabs, this option is used as a heuristic to determine column width only. +quote_style = "AutoPreferDouble" # Quote style for string literals. Possible options: AutoPreferDouble, AutoPreferSingle, ForceDouble, ForceSingle. AutoPrefer styles will prefer the specified quote style, but fall back to the alternative if it has fewer string escapes. Force styles always use the specified style regardless of escapes. +call_parentheses = "Always" # Whether parentheses should be applied on function calls with a single string/table argument. Possible options: Always, NoSingleString, NoSingleTable, None, Input. Always applies parentheses in all cases. NoSingleString omits parentheses on calls with a single string argument. Similarly, NoSingleTable omits parentheses on calls with a single table argument. None omits parentheses in both cases. Note: parentheses are still kept in situations where removal can lead to obscurity (e.g. foo "bar".setup -> foo("bar").setup, since the index is on the call result, not the string). Input removes all automation and preserves parentheses only if they were present in input code: consistency is not enforced. +space_after_function_names = "Never" # Specify whether to add a space between the function name and parentheses. Possible options: Never, Definitions, Calls, or Always +collapse_simple_statement = "Always" # Specify whether to collapse simple statements. Possible options: Never, FunctionOnly, ConditionalOnly, or Always + +[sort_requires] +enabled = false \ No newline at end of file