wagoodman/dive · error

no keybinding configured for

Error message

no keybinding configured for '%s'

What it means

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.

Solutions

  1. Find the named action in the error message and give it a valid key in dive.yaml, e.g. 'ctrl+f'.
  2. Remove the entry entirely instead of leaving it empty if you want the default key.
  3. Validate config keys against the current dive docs for your version.
  4. As a last resort, delete the keybindings section to restore all defaults.

Example fix

# before (dive.yaml)
keybinding:
  filetree:
    toggle-added: []   # -> no keybinding configured for 'Toggle Added Files'

# after
keybinding:
  filetree:
    toggle-added: ctrl+a
Defensive patterns

Strategy: validation

Validate before calling

# verify every configured keybinding is non-empty before launch
yq -r '.keybinding | .. | select(type == "!!seq") | length' dive.yaml | grep -q '^0$' && echo "empty keybinding found" && exit 1 || true

Prevention

When it happens

Trigger: 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.

Common situations: 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).

Related errors


AI-assisted analysis of wagoodman/dive@d6c691947f (2026-08-15). Data as JSON: /api/errors/1bc54a7edde67f40. Report an issue: GitHub.

Appendix: source

Thrown at cmd/dive/cli/internal/ui/v1/key/binding.go:30

	Modifier   gocui.Modifier
	Config     Config
	OnAction   func() error
	IsSelected func() bool
	Display    string
}

type Binding struct {
	key         []keybinding.Key
	displayName string
	selectedFn  func() bool
	actionFn    func() error
}

func GenerateBindings(gui *gocui.Gui, influence string, infos []BindingInfo) ([]*Binding, error) {
	var result = make([]*Binding, 0)
	for _, info := range infos {
		if len(info.Config.Keys) == 0 {
			return nil, fmt.Errorf("no keybinding configured for '%s'", info.Display)
		}

		binding, err := newBinding(gui, influence, info.Config.Keys, info.Display, info.OnAction)

		if err != nil {
			return nil, err
		}

		if info.IsSelected != nil {
			binding.RegisterSelectionFn(info.IsSelected)
		}
		if len(info.Display) > 0 {
			result = append(result, binding)
		}
	}
	return result, nil
}

View on GitHub (pinned to d6c691947f)