Skip to content

Scrolling layout: columns expand to fill the work area when the strip is not full #1753

Description

@scotttromley

Summary

On the Scrolling layout, a strip holding fewer containers than columns widens them to fill the work area. With columns: 3 and a single container, that container gets the entire work area rather than one column's worth.

This is the opposite of how scrollable tiling behaves in PaperWM and niri, where a column keeps its width and the remainder of the strip is simply left empty.

Measured on a 32:9 panel

columns: 3, work area 7632px wide (7680px panel, komorebi-bar offset applied):

containers column width
1 7584
2 3792
3 2544

The single-container case is the one that hurts: a browser window spans 7632px instead of the 2544px column the config asks for.

Resizing is not a workaround

I expected to be able to narrow the column by hand, but resize-axis horizontal is a silent no-op with one container. Three separate places prevent it:

  1. calculate_scrolling_adjustment returns early for len <= 1, so any resize delta is discarded
  2. enforce_resize_for_scrolling calls enforce_no_resize for 0 or 1 containers, and always zeroes the last column's right
  3. is_valid_direction rejects Left for idx 0 and Right for the last container, so with a single container neither horizontal direction is valid

The commands return exit 0 throughout, so from the outside it just looks like nothing happens.

Proposal

Two opt-in additions to ScrollingLayoutOptions, both defaulting to unset so existing behaviour is unchanged:

  • fixed_column_width — keep columns at work_area / columns regardless of container count
  • width_steps — width presets that a new komorebic scrolling-cycle-column-width <next|previous> snaps the focused column to, mirroring PaperWM's cycle_width_steps / cycleWindowWidth. Defaults to the golden ratio steps [0.382, 0.5, 0.618]

Worth noting that column_ratios cannot serve as width_steps: validate_ratios truncates once the cumulative sum reaches 1.0, which would cut [0.382, 0.5, 0.618] down to two entries. Steps are alternatives rather than a partition, so they need their own validator.

I have this working and will open a PR against this issue. Happy to drop the width_steps half and land only fixed_column_width if you would rather keep the surface area smaller, or to take a different design entirely.

Environment

komorebi 0.1.41, Windows 11 26200, four monitors (7680x2160 32:9 plus three others).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions