wagoodman/dive · error

unable to setup filter controller: %w

Error message

unable to setup filter controller: %w

What it means

Raised in the filter view's Layout when Filter.Setup fails on first-time creation of the 'filter' label and input views. Setup configures the editor and view options for the path-filter input line; any error from that setup (or its initial render) is wrapped here. The filter view's geometry depends on len(v.labelStr), so degenerate label widths or tiny terminals can produce bad SetView coordinates upstream.

Source

Thrown at cmd/dive/cli/internal/ui/v1/view/filter.go:180

// OnLayoutChange is called whenever the screen dimensions are changed
func (v *Filter) OnLayoutChange() error {
	err := v.Update()
	if err != nil {
		return err
	}
	return v.Render()
}

func (v *Filter) Layout(g *gocui.Gui, minX, minY, maxX, maxY int) error {
	v.logger.Tracef("layout(minX: %d, minY: %d, maxX: %d, maxY: %d)", minX, minY, maxX, maxY)

	label, labelErr := g.SetView(v.Name()+"label", minX, minY, len(v.labelStr), maxY, 0)
	view, viewErr := g.SetView(v.Name(), minX+(len(v.labelStr)-1), minY, maxX, maxY, 0)

	if utils.IsNewView(viewErr, labelErr) {
		err := v.Setup(view, label)
		if err != nil {
			return fmt.Errorf("unable to setup filter controller: %w", err)
		}
	}
	return nil
}

func (v *Filter) RequestedSize(available int) *int {
	return &v.requestedHeight
}

View on GitHub (pinned to d6c691947f)

Solutions

  1. Check the wrapped error for the concrete Setup failure
  2. Use a wider terminal (the label plus input need several columns)
  3. If you changed the filter label string, ensure its length leaves room (maxX > minX + len(label) - 1)
  4. Report upstream if reproducible in stock dive
Defensive patterns

Strategy: try-catch

Validate before calling

// ensure the label leaves room for the input area
if maxX <= minX+len(v.labelStr) { return nil }

Try / catch

if err := v.Setup(view, label); err != nil {
    return fmt.Errorf("unable to setup filter controller: %w", err)
}

Prevention

When it happens

Trigger: utils.IsNewView true for the filter/label views and Filter.Setup returning non-nil — e.g. editor/keybinding wiring failing, or the initial header render erroring because the label view was created with a degenerate rectangle (len(v.labelStr) small vs minX).

Common situations: Custom forks modifying the filter label; terminals too narrow for the label plus input area; shutdown races during first layout; running non-stock builds with extra Setup logic.

Related errors


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