Add-ons with keymap entries generate duplicates in keymap #88518

Open
opened 2 years ago by Toxijuice · 29 comments

System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: NVIDIA GeForce GTX 1060 6GB/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 466.27

Blender Version
Broken: version: 2.93.0 Beta, branch: master, commit date: 2021-05-19 16:30, hash: blender/blender@0456223cde
Worked: Unsure, tested 2.91.2 and it also has the issue.

Short description of error
Importing keymap creates duplicate entries

Exact steps for others to reproduce the error

  • Activate an addon which adds custom key bindings (Use NodeWrangler as an example. It adds lots of key bindings, is widely used and comes bundled with Blender)
  • Save existing keymap under a new name
  • Export it (select All Keymap option)
  • Import it back
    Result: The large amount of key bindings in Node Editor section of keymap created by NodeWrangler is now doubled. Exporting and Importing the keymap again will triple the bindings, and so on.
    Expected: The addon key bindings are not doubled when importing the keymap.
**System Information** Operating system: Windows-10-10.0.19041-SP0 64 Bits Graphics card: NVIDIA GeForce GTX 1060 6GB/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 466.27 **Blender Version** Broken: version: 2.93.0 Beta, branch: master, commit date: 2021-05-19 16:30, hash: `blender/blender@0456223cde` Worked: Unsure, tested 2.91.2 and it also has the issue. **Short description of error** Importing keymap creates duplicate entries **Exact steps for others to reproduce the error** - Activate an addon which adds custom key bindings (Use NodeWrangler as an example. It adds lots of key bindings, is widely used and comes bundled with Blender) - Save existing keymap under a new name - Export it (select `All Keymap option`) - Import it back Result: The large amount of key bindings in Node Editor section of keymap created by NodeWrangler is now doubled. Exporting and Importing the keymap again will triple the bindings, and so on. Expected: The addon key bindings are not doubled when importing the keymap.
Poster

Added subscriber: @Toxijuice

Added subscriber: @Toxijuice
Collaborator

blender/blender#89945 was marked as duplicate of this issue

blender/blender#89945 was marked as duplicate of this issue
Collaborator

blender/blender#94180 was marked as duplicate of this issue

blender/blender#94180 was marked as duplicate of this issue
Collaborator

Added subscriber: @PratikPB2123

Added subscriber: @PratikPB2123
Collaborator

@Toxijuice , can you check again with 2.93 LTS

@Toxijuice , can you check again with 2.93 LTS

Added subscriber: @Toxijuice-3

Added subscriber: @Toxijuice-3

Just tested on 2.93 LTS, it still occurs.

Just tested on 2.93 LTS, it still occurs.
Collaborator

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Collaborator

Thanks for checking. Tested again, now I can reproduce the problem.

Adding ~8-9 Keyconfig presets will help to reproduce the problem.

Thanks for checking. Tested again, now I can reproduce the problem. Adding ~8-9 Keyconfig presets will help to reproduce the problem.
Collaborator

Added subscribers: @Rawalanche, @Branskugel

Added subscribers: @Rawalanche, @Branskugel

In #88518#1181126, @PratikPB2123 wrote:
Thanks for checking. Tested again, now I can reproduce the problem.

Adding ~8-9 Keyconfig presets will help to reproduce the problem.

This is not NodeWrangler specific issue, this is issue with keymap entries added by any addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is.

> In #88518#1181126, @PratikPB2123 wrote: > Thanks for checking. Tested again, now I can reproduce the problem. > > Adding ~8-9 Keyconfig presets will help to reproduce the problem. This is not NodeWrangler specific issue, this is issue with keymap entries added by **any** addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is.
PratikPB2123 changed title from Node Wrangler creates duplicate entries in keymap when creating new Keyconfig preset to Add-ons with keymap entries generate duplicates in keymap when creating new Keyconfig preset 1 year ago

Added subscriber: @Hologram

Added subscriber: @Hologram

In #88518#1277631, @Rawalanche wrote:

In #88518#1181126, @PratikPB2123 wrote:
Thanks for checking. Tested again, now I can reproduce the problem.

Adding ~8-9 Keyconfig presets will help to reproduce the problem.

This is not NodeWrangler specific issue, this is issue with keymap entries added by any addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is.

Indeed, considering the many bugs related to corrupting the keymap this one may be most severe.
If you are unaware, it will eventually inflate the keymap's file size by quite a lot. When trying to clean up my keymap file, I noticed it had increased from ~400KB to 694KB. Editing it becomes such a mess with items going missing, see: https://developer.blender.org/T94618 that I decided to manually rework the entire thing, which will be over a couple of days worth of work...

> In #88518#1277631, @Rawalanche wrote: >> In #88518#1181126, @PratikPB2123 wrote: >> Thanks for checking. Tested again, now I can reproduce the problem. >> >> Adding ~8-9 Keyconfig presets will help to reproduce the problem. > > This is not NodeWrangler specific issue, this is issue with keymap entries added by **any** addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is. Indeed, considering the many bugs related to corrupting the keymap this one may be most severe. If you are unaware, it will eventually inflate the keymap's file size by quite a lot. When trying to clean up my keymap file, I noticed it had increased from ~400KB to 694KB. Editing it becomes such a mess with items going missing, see: https://developer.blender.org/T94618 that I decided to manually rework the entire thing, which will be over a couple of days worth of work...

In #88518#1284885, @Hologram wrote:

In #88518#1277631, @Rawalanche wrote:

In #88518#1181126, @PratikPB2123 wrote:
Thanks for checking. Tested again, now I can reproduce the problem.

Adding ~8-9 Keyconfig presets will help to reproduce the problem.

This is not NodeWrangler specific issue, this is issue with keymap entries added by any addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is.

Indeed, considering the many bugs related to corrupting the keymap this one may be most severe.
If you are unaware, it will eventually inflate the keymap's file size by quite a lot. When trying to clean up my keymap file, I noticed it had increased from ~400KB to 694KB. Editing it becomes such a mess with items going missing, see: https://developer.blender.org/T94618 that I decided to manually rework the entire thing, which will be over a couple of days worth of work...

The unfortunate reality is that anyone serious about a custom keymap (beyond a slight modifications of the default one) will sooner or later resort to manual editing of the .py file in a code editor rather than using the keymap editor in Blender because there's just way too many way too serious keymap corruption bugs :(

> In #88518#1284885, @Hologram wrote: >> In #88518#1277631, @Rawalanche wrote: >>> In #88518#1181126, @PratikPB2123 wrote: >>> Thanks for checking. Tested again, now I can reproduce the problem. >>> >>> Adding ~8-9 Keyconfig presets will help to reproduce the problem. >> >> This is not NodeWrangler specific issue, this is issue with keymap entries added by **any** addon. If you merge my report into this one, then at least name it correctly. Otherwise, the name of the task implies it's a lot smaller problem than it really is. > > Indeed, considering the many bugs related to corrupting the keymap this one may be most severe. > If you are unaware, it will eventually inflate the keymap's file size by quite a lot. When trying to clean up my keymap file, I noticed it had increased from ~400KB to 694KB. Editing it becomes such a mess with items going missing, see: https://developer.blender.org/T94618 that I decided to manually rework the entire thing, which will be over a couple of days worth of work... The unfortunate reality is that anyone serious about a custom keymap (beyond a slight modifications of the default one) will sooner or later resort to manual editing of the .py file in a code editor rather than using the keymap editor in Blender because there's just way too many way too serious keymap corruption bugs :(

By the way, this bug also occurs when enabling > disabling > re-enabling addons (such as node-wrangler) that create keymap entries upon enabling the addon. This makes it so that duplicate items will emerge. So there are two methods that can corrupt the keymap.
This still occurs on Blender 3.0.

By the way, this bug also occurs when enabling > disabling > re-enabling addons (such as node-wrangler) that create keymap entries upon enabling the addon. This makes it so that duplicate items will emerge. So there are two methods that can corrupt the keymap. This still occurs on Blender 3.0.

The unfortunate reality is that anyone serious about a custom keymap (beyond a slight modifications of the default one) will sooner or later resort to manual editing of the .py file in a code editor rather than using the keymap editor in Blender because there's just way too many way too serious keymap corruption bugs :(

I don't think people are aware of the severity of this particular bug, just check the other task I mentioned and you will see that there are some serious unforseen consequences to this.

> The unfortunate reality is that anyone serious about a custom keymap (beyond a slight modifications of the default one) will sooner or later resort to manual editing of the .py file in a code editor rather than using the keymap editor in Blender because there's just way too many way too serious keymap corruption bugs :( I don't think people are aware of the severity of this particular bug, just check the other task I mentioned and you will see that there are some serious unforseen consequences to this.

Removed subscriber: @Branskugel

Removed subscriber: @Branskugel
PratikPB2123 changed title from Add-ons with keymap entries generate duplicates in keymap when creating new Keyconfig preset to Add-ons with keymap entries generate duplicates in keymap 1 year ago
Collaborator
Added subscribers: @IihT2cWA9xiP30BsYphz3EiEISNoScoe, @filedescriptor, @twonumbers

Grease Pencil Tools and Material Utilities, both bundled with Blender suffer from the same problem as Node Wrangler, I'm compiling the full list here: https://developer.blender.org/T89945

And notice, it also happens without 'Export all Keymaps' checked.

Grease Pencil Tools and Material Utilities, both bundled with Blender suffer from the same problem as Node Wrangler, I'm compiling the full list here: https://developer.blender.org/T89945 And notice, it also happens without 'Export all Keymaps' checked.
TR4 commented 12 months ago

Added subscriber: @TR4

Added subscriber: @TR4

@PratikPB2123 could the duplication bugs for keymaps when exporting the keymap and enabling/disabling addons please be fixed for Blender 3.2?

@PratikPB2123 could the duplication bugs for keymaps when exporting the keymap and enabling/disabling addons please be fixed for Blender 3.2?
Collaborator

Hello @Hologram , unfortunately I don't know the fix (not investigated yet)
it's actually a long standing bug (oldest report I found was blender/blender#45578 (Duplicate Addons Hotkeys)) so I can't guarantee that it'll get fixed sooner :)

Hello @Hologram , unfortunately I don't know the fix (not investigated yet) it's actually a long standing bug (oldest report I found was blender/blender#45578 (Duplicate Addons Hotkeys)) so I can't guarantee that it'll get fixed sooner :)

@PratikPB2123 I think I understand the cause of the issue and why sometimes addons do and sometimes do not create duplicates.
It is actually surprisingly simple in principle and related to this bug: https://developer.blender.org/T86228.

If you enable an addon, it adds a keymap entry to Blender's default keymap. Since Blender does not differentiate between keymaps during editing (it changes all keymaps globally rather than one individually) it means Blender adds a keymap item. When exporting the keymap, it exports this entry. When importing this keymap, it adds a second entry to the keymap, because Blender initially added one with the addon and that's still being processed.

On the other hand, if the addon's keymap item is removed before importing the exported keymap, it does not create a duplicate. Then, it only imports one item, since there is no other item to process. As soon as duplicates exist, they stack up when importing/ exporting.

Steps to reproduce

  1. Go to Preferences > Add-ons > enable "Material Utilities" that is bundled with Blender
  2. Go to the Keymap editor, search for "Shift + Q" and locate "Material Utilities" under the 3d view header.
  3. Export the keymap with the "All Keymaps" option checked
  4. Import the Keymap from step 3.
  5. Notice that there is a second entry for "Material Utilities"
  6. Go to Preferences > Add-on, disable the addon.
  7. Notice that there is now just one keymap entry
  8. Re-enable the addon in Preferences > Add-on
  9. Notice that this adds the second keymap entry back into the list.
  10. Go back to the default Blender Keymap, remove the single entry for "Material Utilities"
  11. Import the keymap from step 3. Notice that this adds back the keymap entry for "Material Utilities".

Keymap Duplication_Rendered0001-6234.mp4

@PratikPB2123 I think I understand the cause of the issue and why sometimes addons do and sometimes do not create duplicates. It is actually surprisingly simple in principle and related to this bug: https://developer.blender.org/T86228. If you enable an addon, it adds a keymap entry to Blender's default keymap. Since Blender does not differentiate between keymaps during editing (it changes all keymaps globally rather than one individually) it means Blender adds a keymap item. When exporting the keymap, it exports this entry. When importing this keymap, it adds a second entry to the keymap, because Blender initially added one with the addon and that's still being processed. On the other hand, if the addon's keymap item is removed before importing the exported keymap, it does not create a duplicate. Then, it only imports one item, since there is no other item to process. As soon as duplicates exist, they stack up when importing/ exporting. **Steps to reproduce** 1. Go to Preferences > Add-ons > enable "Material Utilities" that is bundled with Blender 2. Go to the Keymap editor, search for "Shift + Q" and locate "Material Utilities" under the 3d view header. 3. Export the keymap with the "All Keymaps" option checked 4. Import the Keymap from step 3. 5. Notice that there is a second entry for "Material Utilities" 6. Go to Preferences > Add-on, disable the addon. 7. Notice that there is now just one keymap entry 8. Re-enable the addon in Preferences > Add-on 9. Notice that this adds the second keymap entry back into the list. 10. Go back to the default Blender Keymap, remove the single entry for "Material Utilities" 11. Import the keymap from step 3. Notice that this adds back the keymap entry for "Material Utilities". [Keymap Duplication_Rendered0001-6234.mp4](https://archive.blender.org/developer/F12996608/Keymap_Duplication_Rendered0001-6234.mp4)

Also, for addons which have preferences to change the keymaps, duplicates can emerge when the preferences do not correspond to the keymaps. In other words, if I have preferences saved with a shortcut set to X, though I have a keymap with the shortcut set to Y, importing the latter adds the shortcut for Y. Resulting in both X and Y entries in the keymap. The keymap with Y can be created by manually changing the keymap and exporting and quitting Blender without saving the preferences.

Disabling a keymap item has the same effect, because this prevents the merger of the two and is especially apparent in modals, where they end up stacking new duplicate entries which are all enabled (each export adds 1 additional item for every disabled keymap).
For example:
afbeelding.png

But it does not happen here:
afbeelding.png

I can elaborate on all of this if needed.

Also, for addons which have preferences to change the keymaps, duplicates can emerge when the preferences do not correspond to the keymaps. In other words, if I have preferences saved with a shortcut set to X, though I have a keymap with the shortcut set to Y, importing the latter adds the shortcut for Y. Resulting in both X and Y entries in the keymap. The keymap with Y can be created by manually changing the keymap and exporting and quitting Blender without saving the preferences. Disabling a keymap item has the same effect, because this prevents the merger of the two and is especially apparent in modals, where they end up stacking new duplicate entries which are all enabled (each export adds 1 additional item for every disabled keymap). For example: ![afbeelding.png](https://archive.blender.org/developer/F12996664/afbeelding.png) But it does not happen here: ![afbeelding.png](https://archive.blender.org/developer/F12996665/afbeelding.png) I can elaborate on all of this if needed.
Collaborator

Added subscriber: @ideasman42

Added subscriber: @ideasman42
Collaborator

Hi, thanks for the investigation.

Not sure who is the active developer in this area. Maybe @ideasman42 ?
If so, can you share your thoughts?

Hi, thanks for the investigation. Not sure who is the active developer in this area. Maybe @ideasman42 ? If so, can you share your thoughts?

I would also like to emphasize that certain addons (e.g. Nodewrangler) currently require you to make changes to the default Blender keymap, because if you export the keymap that you edited, it adds a long list of duplicates that have the default keymap settings (from Blender's default keymap). So, in order to import a custom keymap, you have to delete all Node Wrangler entries from Blender's keymap. This is a side-effect from this bug.
But, it also means that if I exported my keymap (with the "All Keymaps" option unchecked) I am not able to import this particular input in a factory state Blender, because the default keymap would contain entries for Node Wrangler when the addon is enabled OR the custom keymap does not contain the entries, because they were created in the default keymap. This thus defeats the purpose of exporting keymaps when add-ons are involved!

  1. So, I think there should be a fix for resetting Blender's keymap to the default state, at least to make sure that anyone who has created a custom keymap is able to undo the mess that is created by all the keymap bugs.
  2. Make sure that the correct keymap items are exported (and not duplicated)
  3. Make sure to check for duplications upon importing
  4. Make sure to merge duplicates that have emerged
  5. Make sure that keymap items do not jump around as this also messes with the keymap and causes items to get lost.
  6. Have a check for the keymap when enabling/ disabling an addon, to prevent additional items from appearing, whether they are duplicates or different ones than the user specified in the Add-on's preferences.

I really do hope that all the keymap related bugs will be addressed as one, because I fear that solving a single one does not resolve the mess entirely due to their interrelatedness.

I would also like to emphasize that certain addons (e.g. Nodewrangler) currently require you to make changes to the default Blender keymap, because if you export the keymap that you edited, it adds a long list of duplicates that have the default keymap settings (from Blender's default keymap). So, in order to import a custom keymap, you have to delete all Node Wrangler entries from Blender's keymap. This is a side-effect from this bug. But, it also means that if I exported my keymap (with the "All Keymaps" option unchecked) I am not able to import this particular input in a factory state Blender, because the default keymap would contain entries for Node Wrangler when the addon is enabled OR the custom keymap does not contain the entries, because they were created in the default keymap. This thus defeats the purpose of exporting keymaps when add-ons are involved! 1. So, I think there should be a fix for resetting Blender's keymap to the default state, at least to make sure that anyone who has created a custom keymap is able to undo the mess that is created by all the keymap bugs. 2. Make sure that the correct keymap items are exported (and not duplicated) 3. Make sure to check for duplications upon importing 4. Make sure to merge duplicates that have emerged 5. Make sure that keymap items do not jump around as this also messes with the keymap and causes items to get lost. 6. Have a check for the keymap when enabling/ disabling an addon, to prevent additional items from appearing, whether they are duplicates or different ones than the user specified in the Add-on's preferences. I really do hope that all the keymap related bugs will be addressed as one, because I fear that solving a single one does not resolve the mess entirely due to their interrelatedness.

Added subscriber: @Nurb2Kea

Added subscriber: @Nurb2Kea
GeRo commented 5 months ago

Added subscriber: @GeRo

Added subscriber: @GeRo
Sign in to join this conversation.
No Label
good first issue
legacy module/Animation & Rigging
legacy module/Core
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/User Interface
legacy module/VFX & Video
legacy project/2.81
legacy project/2.82
legacy project/2.83
legacy project/2.90
legacy project/2.92
legacy project/2.93
legacy project/3.0
legacy project/3.1
legacy project/3.2
legacy project/3.4
legacy project/Add-ons (BF-Blender)
legacy project/Add-ons (Community)
legacy project/Alembic
legacy project/Animation & Rigging
legacy project/Asset Browser
legacy project/Automated Testing
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Blender Cloud
legacy project/Code Quest
legacy project/Collada
legacy project/Compositing
legacy project/Core
legacy project/Cycles
legacy project/Datablocks and Libraries
legacy project/Dependency Graph
legacy project/Documentation
legacy project/EEVEE & Viewport
legacy project/Freestyle
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Physics
legacy project/Game Python
legacy project/Game UI
legacy project/Geometry Nodes
legacy project/Good First Issue
legacy project/Grease Pencil
legacy project/Images & Movies
legacy project/Import/Export
legacy project/Infrastructure: Blender Buildbot
legacy project/Infrastructure: Blender Web Assets
legacy project/Infrastructure: Websites
legacy project/Modeling
legacy project/Modifiers
legacy project/Motion Tracking
legacy project/Nodes
legacy project/Nodes & Physics
legacy project/OpenGL Error
legacy project/Overrides
legacy project/Papercut
legacy project/Physics
legacy project/Pillar
legacy project/Pipeline, Assets & I/O
legacy project/Platform: Linux
legacy project/Platform: macOS
legacy project/Platforms, Builds, Tests & Devices
legacy project/Platform: Windows
legacy project/Python API
legacy project/Render & Cycles
legacy project/Render Pipeline
legacy project/Sculpt, Paint & Texture
legacy project/Straightforward Issue
legacy project/Text Editor
legacy project/Tracker Curfew
legacy project/Translations
legacy project/USD
legacy project/User Interface
legacy project/UV Editing
legacy project/VFX & Video
legacy project/Video Sequencer
legacy project/Virtual Reality
papercut
Priority › High
Priority › Low
Priority › Normal
Priority › Unbreak Now!
Status › Archived
Status › Confirmed
Status › Duplicate
Status › Needs Information from Developers
Status › Needs Information from User
Status › Needs Triage
Status › Resolved
straightforward issue
Type › Bug
Type › Design
Type › Known Issue
Type › Patch
Type › Report
Type › To Do
No Milestone
No project
No Assignees
10 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender-addons#88518
Loading…
There is no content yet.