{"record":{"id":"1bc54a7edde67f40","repo":"wagoodman/dive","slug":"no-keybinding-configured-for-s","errorCode":null,"errorMessage":"no keybinding configured for '%s'","messagePattern":"no keybinding configured for '(.+?)'","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/dive/cli/internal/ui/v1/key/binding.go","lineNumber":30,"sourceCode":"\tModifier   gocui.Modifier\n\tConfig     Config\n\tOnAction   func() error\n\tIsSelected func() bool\n\tDisplay    string\n}\n\ntype Binding struct {\n\tkey         []keybinding.Key\n\tdisplayName string\n\tselectedFn  func() bool\n\tactionFn    func() error\n}\n\nfunc GenerateBindings(gui *gocui.Gui, influence string, infos []BindingInfo) ([]*Binding, error) {\n\tvar result = make([]*Binding, 0)\n\tfor _, info := range infos {\n\t\tif len(info.Config.Keys) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"no keybinding configured for '%s'\", info.Display)\n\t\t}\n\n\t\tbinding, err := newBinding(gui, influence, info.Config.Keys, info.Display, info.OnAction)\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif info.IsSelected != nil {\n\t\t\tbinding.RegisterSelectionFn(info.IsSelected)\n\t\t}\n\t\tif len(info.Display) > 0 {\n\t\t\tresult = append(result, binding)\n\t\t}\n\t}\n\treturn result, nil\n}\n","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/wagoodman/dive/blob/d6c691947f8fda635c952a17ee3b7555379d58f0/cmd/dive/cli/internal/ui/v1/key/binding.go#L12-L48","documentation":"Thrown by the key-binding generator when a BindingInfo has an empty Config.Keys slice — i.e. the user's keybinding configuration (dive.yaml keybindings section) defined an action with no key assigned. Every bindable action must map to at least one parsed keybinding.Key.","triggerScenarios":"A dive.yaml keybindings entry like 'filetree-toggle-added: []' or an action key set to an empty string/empty list, causing Config.Setup() to leave Keys empty and GenerateBindings to reject it at startup.","commonSituations":"Hand-edited keybinding config with a blank value; migrating an old config format that used different key names; intentionally 'unbinding' an action by emptying it (unsupported — dive requires a key).","solutions":["Find the named action in the error message and give it a valid key in dive.yaml, e.g. 'ctrl+f'.","Remove the entry entirely instead of leaving it empty if you want the default key.","Validate config keys against the current dive docs for your version.","As a last resort, delete the keybindings section to restore all defaults."],"exampleFix":"# before (dive.yaml)\nkeybinding:\n  filetree:\n    toggle-added: []   # -> no keybinding configured for 'Toggle Added Files'\n\n# after\nkeybinding:\n  filetree:\n    toggle-added: ctrl+a","handlingStrategy":"validation","validationCode":"# verify every configured keybinding is non-empty before launch\nyq -r '.keybinding | .. | select(type == \"!!seq\") | length' dive.yaml | grep -q '^0$' && echo \"empty keybinding found\" && exit 1 || true","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never leave a keybinding entry empty; remove it to use defaults.","Lint dive.yaml for empty sequences in the keybinding section.","Version-control your dive config and review diffs that empty out keys."],"tags":["dive","tui","keybinding","configuration","yaml"],"backgroundTag":null,"analyzedSha":"d6c691947f8fda635c952a17ee3b7555379d58f0","analyzedAt":"2026-08-15T09:42:35.293Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}