diff --git a/KeybindSaver.lua b/KeybindSaver.lua index f54a075..59a7fab 100644 --- a/KeybindSaver.lua +++ b/KeybindSaver.lua @@ -24,6 +24,10 @@ local function SaveKeybindSet(setName) for i = 1, numBindings do local command, _, key1, key2 = GetBinding(i) + if string.find(command, "CLICK ") then + -- What a stupid fucking api, so fucking idiotic, retarded + command, key2 = strsplit(":", command) + end if key1 or key2 then set[command] = { key1 = key1, key2 = key2, @@ -34,6 +38,21 @@ local function SaveKeybindSet(setName) print(string.format("Saved keybind set '%s'!", setName)) end +---@param command string +---@return nil +local function UnbindCommand(command) + if not command or command == "" then + print("Cannot unbind an empty command") + return + end + + local keys = { GetBindingKey(command) } + for _, key in ipairs(keys) do + -- print("Unbinding", key) + SetBinding(key) + end +end + ---@param setName string ---@return nil local function RestoreKeybindSet(setName) @@ -53,8 +72,22 @@ local function RestoreKeybindSet(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 + UnbindCommand(command) + -- This fucking catastrophe binds a KEY(2) to CLICK A BUTTON (command) as a MOUSE BUTTON (key1) + if string.find(command, "CLICK ") and keys.key2 then + command = string.gsub(command, "CLICK ", "") + local ok = SetBindingClick(keys.key2, command, keys.key1) + if not ok then print("Failed to bind click", keys.key1, command) end + else + if keys.key1 then + local ok = SetBinding(keys.key1, command) + if not ok then print("Failed to bind", keys.key1, command) end + end + if keys.key2 then + local ok = SetBinding(keys.key2, command) + if not ok then print("Failed to bind", keys.key2, command) end + end + end end -- Save the changes @@ -108,14 +141,12 @@ local function ImportKeybindSet(setName, importStr) local lines = { strsplit("\n", importStr) } for _, line in ipairs(lines) do - local command, key = strsplit(":", line) + local command, key, key2 = strsplit(":", line) if command and key then - if not set[command] then set[command] = {} end - if not set[command].key1 then - set[command].key1 = key - else - set[command].key2 = key - end + if not set[command] then set[command] = { + key1 = key, + key2 = key2, + } end end end @@ -185,9 +216,14 @@ local function ExportKeybindSet(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 command and keys and (keys.key1 or keys.key2) then + local formatted = command + if keys.key1 then formatted = formatted .. ":" .. keys.key1 end + if keys.key2 then formatted = formatted .. ":" .. keys.key2 end + export[#export + 1] = formatted + end end + table.sort(export) local exportStr = table.concat(export, "\n") importExportFrame:Show()