Download
(8 Kb)
Download
Updated: 03/09/24 07:24 AM
Pictures
File Info
Compatibility:
Scions of Ithelia (9.3.0)
Endless Archive (9.2.5)
Updated:03/09/24 07:24 AM
Created:08/16/15 07:27 AM
Monthly downloads:15,783
Total downloads:500,904
Favorites:737
MD5:
Categories:Miscellaneous, Graphic UI Mods, Utility Mods
9.3.0
Votan's Keybinder  Popular! (More than 5000 hits)
Version: 1.4.5
by: votan [More]
DependenciesInfo!
With update 35 ZOS confirms there is a limit of 100 for custom key bindings. Key binds, which differ from default, to be exact. This includes unbinding keys or shifting the column just because it looks better.
Once update 35 is out, take that hints seriously and restore as much standard key bindings as you can. For example controller keys, even if you do have a controller.
Keybinder allows you to exceed this limit with account-wide bindings, because once ZOS does not store them anymore, they get re-bound on every login.
Do not blame ZOS or me for lost key bindings, once you get that red hint.

Description
Adds checkboxes to keybind dialog for OS user account wide (not ESO account) shared keybindings.

In addition, since v1.2.0, a text search filter looking for:
  • Category
  • Sub-category
  • Action name
  • Localized action name

Technically ZOS is right, if they say keybindings are a per-character setting, because they can differ. But in consideration of the human factor most keybindings will not differ. I (and this addon) assume everybody has a prefered keyboard-layout, which is used across all characters. Only a few keys will be re-used for different, character specific addons. If you agree, this addon may something for you.

It is tested with and supports Emacs to use key-modifiers like ALT, STRG etc.
It is tested and works with libAddonKeybinds, which splits the list of keybindings into standard and addon.

First Load!
Upon first load all standard keybindings are marked as shared. Please verify it's how you want it.
Once you log to other character these keybindings will be taken over!

New Characters
Shared keybindings are used for new characters, too.

Bugs?
Please let me know.

To Do
- None
version 1.4.5:
- New search box icon.
- API bump.

version 1.4.4: Allow to exceed the limit introduced in U35 using account-wide key-bindings as long as this addon is loaded.

version 1.4.3:
- Update to API 101035.

version 1.4.2:
- Update to French translation. Thanks to @lexo1000.

version 1.4.1: Removed debug message. sorry :)

version 1.4.0:
- Fixed error on trying to change a keybind.
- Fixed clear search button not working.

version 1.3.5:
- API bump.
- Get rid of LibStub.

version 1.3.4:
- Update to API 100034 "Flames of Ambition".

version 1.3.3:
- Update to API 100033 "Markarth".

version 1.3.2:
- Update to API 100032 "Stonethorn".

version 1.3.1:
- Update to API 100031 "Greymoor".

version 1.3.0:
- Get rid of LibStub.
- LibAddonKeybinds: LibStub not required anymore.

version 1.2.14:
- Update to API 100029 "Dragonhold".

version 1.2.13:
- Update to API 100028 "Scalebreaker".

version 1.2.12:
- Update to API 100027 "Elsweyr".

version 1.2.11:
- Update to API 100026 "Wrathstone".

version 1.2.10:
- Update to API 100025 "Murkmire".

version 1.2.9:
- Fixed missing dependency for LibStub. Manifest file was missing.

version 1.2.8:
- Update to API 100024 "Wolfhunter".
- New library load structure.

version 1.2.6:
- API bump 100023 "Summerset".

version 1.2.5:
- API bump for "Dragon Bones".

version 1.2.4:
- Delay syncing key-binds. Hopefully fixing the reported key-binding issues.

version 1.2.3:
- Just to be sure to not causing key-binding errors, the key-bind action layer of the "Controls" dialog is removed a bit earlier as ZOS does.

version 1.2.2:
- Pre-Game the addon had "dependency" problems
- API bump for Horns of the Reach.

version 1.2.1:
- Fixed an issue in the text-search filter showing key-bindings which should be hidden, because they have no caption.
- Localization. Thanks to @lexo1000 for french translation.

version 1.2.0:
- text search filter.

version 1.1.8:
- ESO 2.7 'Homestead' ready.

(Keybinder does currently not work on PTS due to ZOS limitation. But Chip promised this will not go live)

version 1.1.7:
- Speed optimizations.
- Japanese translation. Thanks to @BowmoreLover.

version 1.1.6:
- Categories and actions of addon-keybindings get sorted alphabetically.

version 1.1.5:
- ESO 2.6 'One Tamriel' ready.

version 1.1.4:
- Mark unbound standard key-binds on select-all.
- Embedded libAddonKeybinds to split standard and addon key binds.

version 1.1.3:
- API bump for ESO 2.5: "Shadows of the Hist" ready

version 1.1.2a:
- uploaded a corrected zip

version 1.1.2:
- Hopefully fixed Lua error in combination with libAddonKeyBinds reported by @Beartram
- ESO 2.4 (Dark Brotherhood) support

version 1.1.1:
- Remember actions without any keybind, so it can be used to unbind for all characters.

version 1.1.0:
- ESO 2.3 API 100014
- Added toggle button to de-/select all valid keybindings

version 1.0.0:
- ESO 2.2 (Orsinium): 4 key-binds per action

version 0.7.0:
- As requested by merlight, the addon is more hook-friendly to other addons.
- Fixed issue with unlocalizable key-bindings (not in list) set by Binder: Ignored as build-in code does.

version 0.6.0:
- discovered and fixed an issue with modifiers: Some keys always had a modifier*. *If using Emacs.

version 0.5.0:
- initial version
Optional Files (0)


Archived Files (38)
File Name
Version
Size
Uploader
Date
1.4.4
8kB
votan
08/11/22 12:35 PM
1.4.3
8kB
votan
07/24/22 07:41 AM
1.4.2
8kB
votan
06/05/22 08:00 AM
1.4.1
8kB
votan
03/25/22 01:41 PM
1.4.0
8kB
votan
03/19/22 05:49 AM
1.3.5
8kB
votan
03/14/22 01:53 PM
1.3.4
12kB
votan
02/20/21 09:40 AM
1.3.3
12kB
votan
11/02/20 04:41 AM
1.3.2
12kB
votan
08/22/20 04:56 AM
1.3.1
12kB
votan
05/24/20 10:39 AM
1.3.0
12kB
votan
02/15/20 11:45 AM
1.2.14
17kB
votan
10/19/19 08:26 AM
1.2.13
17kB
votan
08/12/19 11:13 AM
1.2.12
17kB
votan
05/18/19 08:07 AM
1.2.11
26kB
votan
02/23/19 10:16 AM
1.2.10
20kB
votan
12/09/18 11:48 AM
1.2.9
18kB
votan
08/19/18 03:28 AM
1.2.8
20kB
votan
08/13/18 11:18 AM
1.2.6
12kB
votan
05/15/18 11:46 AM
1.2.5
12kB
votan
01/27/18 07:18 AM
1.2.4
12kB
votan
11/18/17 09:32 AM
1.2.3
12kB
votan
08/22/17 01:31 PM
1.2.2
12kB
votan
08/04/17 10:53 AM
1.2.1
12kB
votan
05/21/17 11:14 PM
1.2.0
12kB
votan
04/14/17 02:52 AM
1.1.8
11kB
votan
02/05/17 05:58 AM
1.1.7
11kB
votan
11/09/16 12:52 PM
1.1.6
10kB
votan
09/24/16 09:38 AM
1.1.5
10kB
votan
09/22/16 12:12 PM
1.1.4
10kB
votan
08/02/16 10:54 AM
1.1.3
6kB
votan
07/03/16 11:55 AM
1.1.2a
6kB
votan
06/02/16 10:11 AM
1.1.1
6kB
votan
04/13/16 12:17 PM
1.1.0
6kB
votan
03/07/16 11:57 AM
1.0.0
5kB
votan
11/02/15 01:40 PM
0.7.0
5kB
votan
09/02/15 01:38 PM
0.6.0
5kB
votan
08/17/15 01:17 PM
0.5.0
5kB
votan
08/16/15 07:27 AM


Post A Reply Comment Options
Unread 08/17/15, 01:39 PM  
OSean980

Forum posts: 15
File comments: 127
Uploads: 0
Thank you for making this addon Votan! It serves a very important function with an incredible interface, as do all of your addons. Your time as an addon author for ESO is well-appreciated. Thanks again for the great work!
Report comment to moderator  
Reply With Quote
Unread 08/17/15, 10:48 PM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Originally Posted by OSean980
Thank you for making this addon Votan! It serves a very important function with an incredible interface, as do all of your addons. Your time as an addon author for ESO is well-appreciated. Thanks again for the great work!
Woh... Thank you, OSean980.
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 10:21 AM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
This will be the perfect add-on for me. I'm too lazy too type /binder load, and too distrustful to set /binder auto.

Two issues, though.

1) HookKeybindingEventsHidding
I understand the reasoning, and agree with it, but... I have an unfinished-for-six-months keybind-filtering addon/lib lying around, which does KEYBINDING_MANAGER.list:RefreshFilters() after setting up the filter -- but that fails because you suppressed all the calls that would BuildMasterList() before my OnLoad. Not sure how to solve that properly

2) I logged an almost-new character (didn't bother with bindings yet) to test something else; later logged my main, then I realized this add-on just replaced my bindings with the defaults. So I did /binder load main (while having keybinds settings open) and got this:
Code:
user:/AddOns/VotansKeybinder/Main.lua:185: attempt to index a nil value
stack traceback:
	user:/AddOns/VotansKeybinder/Main.lua:185: in function 'KEYBINDING_MANAGER:HandleBindingSet'
	EsoUI/Ingame/Keybindings/Keybindings.lua:15: in function '(anonymous)'
My Binder profile 'main' may contain bindings for add-ons that are disabled/deleted, maybe that's a problem?
Last edited by merlight : 08/19/15 at 10:21 AM.
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 10:24 AM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
One more question: if I delete the saved vars, then log in another character that has my custom bindings setup, it should make them default, right?
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 12:02 PM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Originally Posted by merlight
One more question: if I delete the saved vars, then log in another character that has my custom bindings setup, it should make them default, right?
Yes. It checks, if the saved keybinding-list is empty, if so it reads the bindings for default actions and copies them to the list.

The other error is a bit strange. The master list should contain all actions, which could currently be binded. If this list does not contain the action you want to bind to, binder set keys for actions currently not available.
Obviously not well tested...
Last edited by votan : 08/19/15 at 12:04 PM.
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 02:32 PM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
This might be a bit too much to ask, but I want to use this that much, so I have to ask

I added a call counter and got 9 KEYBINDING_MANAGER:HandleBindingsLoaded calls upon load, and thought that was why you commented the refresh out. After uncommenting the call to RefreshList() I found the real reason Your SetupRow needs SavedVars loaded.

So now I'm thinking about replacing HookKeybindingEventsHidding() with KEYBINDING_MANAGER.list:SetLockedForUpdates(true). Then RefreshList won't do anything, my calls to RefreshFilters won't do anything (and won't throw error). And when everything's ready you can KEYBINDING_MANAGER.list:SetLockedForUpdates(false) and it will do the refresh. It's fragile, I know, any add-on can switch that flag on/off at any time. It just feels a little bit less hacky than overriding KEYBINDING_MANAGER:HandleBindingsLoaded twice.
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 02:47 PM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Another note: KEYBINDING_MANAGER:HandleBindingSet hook (the real one, not the dummy pre-init dummy one) looks like it could be replaced with plain EVENT_KEYBINDING_SET handler.

KEYBINDING_MANAGER:HandleBindingCleared as well, perhaps, but I'm not 100% sure as it calls the original later.
Last edited by merlight : 08/19/15 at 02:48 PM.
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 05:54 PM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
The error I posted earlier is caused by actionName "DIALOG_RESET". Still no idea why it's missing in addon.masterList.

Last issue I had was due to me changing some keybinds to use a special row type I added to the list. Its setupCallback calls your SetupRow hook, so it almost worked. But I can't do the same with the factory function, because it has bound typeId and templateName. So I had to move your checkbox creation into SetupRow to make it work. After also changing the condition in addon:CreateBindingList to (bind.typeId >= KEYBIND_DATA_TYPE), I finally got your checkboxes in my special rows
Report comment to moderator  
Reply With Quote
Unread 08/19/15, 11:49 PM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Originally Posted by merlight
The error I posted earlier is caused by actionName "DIALOG_RESET". Still no idea why it's missing in addon.masterList.
Ah. But I do. DIALOG_RESET is not in the scroll-list?
Originally Posted by merlight
Last issue I had was due to me changing some keybinds to use a special row type I added to the list. Its setupCallback calls your SetupRow hook, so it almost worked. But I can't do the same with the factory function, because it has bound typeId and templateName. So I had to move your checkbox creation into SetupRow to make it work. After also changing the condition in addon:CreateBindingList to (bind.typeId >= KEYBIND_DATA_TYPE), I finally got your checkboxes in my special rows
Oh. And I was so proud not doing control creation in SetupRow.

Originally Posted by merlight
Another note: KEYBINDING_MANAGER:HandleBindingSet hook (the real one, not the dummy pre-init dummy one) looks like it could be replaced with plain EVENT_KEYBINDING_SET handler.

KEYBINDING_MANAGER:HandleBindingCleared as well, perhaps, but I'm not 100% sure as it calls the original later.
No. Was my first approach, of course. The SetupRow is called already and does not reflect right checkbox state. Or I have to call RefreshVisible, to do it again...

Originally Posted by merlight
This might be a bit too much to ask, but I want to use this that much, so I have to ask

I added a call counter and got 9 KEYBINDING_MANAGER:HandleBindingsLoaded calls upon load, and thought that was why you commented the refresh out. After uncommenting the call to RefreshList() I found the real reason Your SetupRow needs SavedVars loaded.
Yes

May we can solve the problem with an OptionalDependsOn?
Do you need hook-point or should I check for something?
Report comment to moderator  
Reply With Quote
Unread 08/20/15, 02:35 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
@merlight: Or, if your filter addon is still unreleased, we can merge instead of finding a way to co-exist?
What excatly is your keybind-filtering addon/lib doing?
Report comment to moderator  
Reply With Quote
Unread 08/20/15, 03:12 AM  
merlight
AddOn Author - Click to view AddOns

Forum posts: 671
File comments: 213
Uploads: 12
Originally Posted by votan
Ah. But I do. DIALOG_RESET is not in the scroll-list?
In Binder's saved vars it has keyCode = 55, which is 'X', used in multiple bindings and I don't know which one it should be. There is no SI_BINDING_NAME_DIALOG_RESET in <esoui/ingamelocalization/localizegeneratedstrings.lua> and in <esoui/ingame/keybindings/keybindings.lua> in AddBindingRow, actions with no localized name are not added, so maybe the binding was removed? But it's still present in <esoui/ingame/globals/bindings.xml> so I really don't know.

Originally Posted by votan
Oh. And I was so proud not doing control creation in SetupRow.
Of course, because that's the proper way On the other hand, if not checkBox then checkBox = createCheckBox(control) end is pretty cheap.

It's more of an issue of my row setup "inheritance" hack. Here's a picture so you see what I'm doing: http://cdn.eso.mmoui.com/preview/pvw2545.png
Basically I had two options:
1) put a combobox in all rows, and only show it for desired bindings. Seemed a little wasteful to me (edit: now that I think of it, 2) is even more wasteful since it creates a whole new pool of rows that are unused most of the time), so I went with
2) add a new row type with combobox and change typeId of desired bindings.
Now that I'm reading the code, I guess I must've fought with the factory function back then as well, because the combobox is created in SetupRow. Maybe I should change it to
3) create comboboxes outside rows, and only show+anchor them in SetupRow (and hide in ResetRow).

Originally Posted by votan
No. Was my first approach, of course. The SetupRow is called already and does not reflect right checkbox state. Or I have to call RefreshVisible, to do it again...
I see. Could you change it so KEYBINDING_MANAGER:HandleBindings* are overridden only once, please? I don't intend to hook them, but if anyone does, their hooks will go away when the menu is shown/hidden. I'm calling SetLockedForUpdates() in OnStateChange and checking KEYBINDINGS_FRAGMENT:IsShowing() in the hooks. It's a lot of scattered changes... should I put it on github gist so you can check it out?

Originally Posted by votan
May we can solve the problem with an OptionalDependsOn?
Do you need hook-point or should I check for something?
OptionalDependsOn was one of the first things I tried It didn't help and probably wasn't necessary (because I was calling the setupCallback long after you hooked it), but also didn't hurt so I left the in place, just in case.

Originally Posted by votan
@merlight: Or, if your filter addon is still unreleased, we can merge instead of finding a way to co-exist?
What excatly is your keybind-filtering addon/lib doing?
It adds "Addon Keybindings" entry to the Controls menu, and splits the list between the two. I also intended to add a text filter, but circonian already did that in TweakIt, so my laziness prevailed. I wrote it around Update 6 release, then stopped playing, and the main reason I didn't release it was that it's a library for add-ons to use, yet does something users might want to turn off. It's the long-discussed problem of where should the setting be displayed and stored.
Last edited by merlight : 08/20/15 at 03:14 AM.
Report comment to moderator  
Reply With Quote
Unread 08/20/15, 03:53 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
@merlight: It should be doable to do the open/not-open hooks a bit different. If not, I will ask for github source later

Aah, I see, you are using the key-bind dialog as a combined configuration dialog for AddonProfiles.

May you should create a regular LAM2 configuration page and change the SI_BINDING_NAME_* strings to show the current configured profile?
And/Or re-create a key-bind scroll-list for your keys in your LAM2 configuration page?

Or the idea of using an external control-pool to dynamically adding and removing the comboboxes sounds doable without adding a new row type, too.
Report comment to moderator  
Reply With Quote
Unread 09/02/15, 04:59 PM  
zellwoodcorn

Forum posts: 0
File comments: 28
Uploads: 0
Separate Keybindings for Different ESO Accounts?

Love this add-on, but I do have a comment/question/request (maybe)?

I may be misinterpreting what I see in the VoltansKeybinder.lua file, but it seems that this locks the key-bindings for all characters _and for all ESO accounts_ on the same "$Machine" (well, for all ESO accounts that use the same "...\Elder Scrolls Online\live\SavedVariables" folder...)

If so, is there some way I could use or change the .lua to keep things separate for two different ESO accounts?

Thanks!
Report comment to moderator  
Reply With Quote
Unread 09/03/15, 02:10 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1667
Uploads: 40
Re: Separate Keybindings for Different ESO Accounts?

Originally Posted by zellwoodcorn
Love this add-on, but I do have a comment/question/request (maybe)?

I may be misinterpreting what I see in the VoltansKeybinder.lua file, but it seems that this locks the key-bindings for all characters _and for all ESO accounts_ on the same "$Machine" (well, for all ESO accounts that use the same "...\Elder Scrolls Online\live\SavedVariables" folder...)

If so, is there some way I could use or change the .lua to keep things separate for two different ESO accounts?

Thanks!
Well, yes, that's correct. I assume the same windows user account is the same person with the same keyboard layout perferences.

But if you don't want to create a new local windows account, you can change it, of course:
In Main.lua in line 378 change:
addon.account = ZO_SavedVars:New("VotansKeybinder_Data", 1, nil, addon.accountDefaults, "Default", "$Machine", "$UserProfileWide")

to

addon.account = ZO_SavedVars:NewAccountWide("VotansKeybinder_Data", 1, nil, addon.accountDefaults, "Default")

You have to re-check your checkboxes.

Greets.
Report comment to moderator  
Reply With Quote
Unread 09/03/15, 11:49 PM  
zellwoodcorn

Forum posts: 0
File comments: 28
Uploads: 0
Re: Re: Separate Keybindings for Different ESO Accounts?

Originally Posted by votan
Originally Posted by zellwoodcorn
Love this add-on, but I do have a comment/question/request (maybe)?

I may be misinterpreting what I see in the VoltansKeybinder.lua file, but it seems that this locks the key-bindings for all characters _and for all ESO accounts_ on the same "$Machine" (well, for all ESO accounts that use the same "...\Elder Scrolls Online\live\SavedVariables" folder...)

If so, is there some way I could use or change the .lua to keep things separate for two different ESO accounts?

Thanks!
Well, yes, that's correct. I assume the same windows user account is the same person with the same keyboard layout perferences.

But if you don't want to create a new local windows account, you can change it, of course:
In Main.lua in line 378 change:
addon.account = ZO_SavedVars:New("VotansKeybinder_Data", 1, nil, addon.accountDefaults, "Default", "$Machine", "$UserProfileWide")

to

addon.account = ZO_SavedVars:NewAccountWide("VotansKeybinder_Data", 1, nil, addon.accountDefaults, "Default")

You have to re-check your checkboxes.

Greets.
----------

Thank you very much Will take it for a spin soon

I had also briefly thought about another Windows account, but then decided it would be a lot more trouble to make another Windows account just for another ESO account, and having to manage another "set" of addons, settings, etc... Doable, but what sealed it for me was not having a single HarvestMap.lua file... (Old add-on, yes, but I still use it accross all my characters...)

Thanks again for the quick reply!

-----------

That definitely did the trick Nice to have the option
Last edited by zellwoodcorn : 09/04/15 at 10:04 AM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: