Repository navigation
Conversation
display.info_widget_position = "pinned" stacks the panel in a fixed 40-cell column on the right of the transcript, which wraps narrower so the panel never covers text or moves. Falls back to flow below a 100-column chat area. Default "flow" is unchanged. Each widget draws an [x] in its top border; clicking it hides the panel like the toggle key. Hit targets come from what render_all drew. display.info_widget = false starts with the panel hidden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Merged and released as v1.0.92. 🎉 Thanks for the clean, well-scoped PR! All three opt-in additions landed:
Checks all passed on
I also fixed two pre-existing Your in-flight work is untouched — this only touched main. PR base was exactly our HEAD, so it merged cleanly. |
dragonked2
pushed a commit
that referenced
this pull request
Nov 2, 2026
Merge PR #22: info widget optional pinned column, [x] to close, start hidden - display.info_widget_position = "pinned" reserves a fixed 40-cell right column; transcript wraps narrower so the panel never covers text or moves while output scrolls (falls back to flow below 100 columns) - [x] close button in each widget's top border hides the panel for the window - display.info_widget = false starts the panel hidden Also: - Bump version to 1.0.92 - Fix redundant closures in server_events.rs tests (clippy::redundant_closure) Co-authored-by: levz0r <levz0r@users.noreply.github.com>
Owner
|
Already merged locally and released as v1.0.92 (commit b7f3ac1). Changes are in main; closing this PR as redundant. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The info widget panel (Session, Todos, ...) docks in the transcript's empty right margin and rides with the line it's anchored to. That keeps it off the text, but it also moves, hides and reappears as output streams and scrolls. Some users would rather have it in one place. The only way to dismiss it is the toggle key, which some terminals can't send (Option+I on macOS types
ˆunless Option is mapped to Alt). It also comes back in every new window.Change
Three opt-in additions. Defaults leave the current behaviour unchanged.
display.info_widget_position = "pinned"reserves a fixed 40-cell column on the right of the transcript. Widgets stack top-down in it in priority order: Overview first, absorbing its mergeable widgets as in flow mode, then whatever else fits. The column is decided before the transcript is prepared, so lines wrap to the narrower width instead of running under the panel. The composer, status line and banner keep the full width. If the chat area is under 100 columns (40 + a 60-column minimum for the chat), it falls back to flow. With the panel hidden or empty, no column is reserved and the transcript gets the full width back."flow"is the default.[x]in each widget's top border. Clicking it hides the panel for the window, exactly like the toggle key.render_allpublishes the drawn[x]cells, and the mouse handler hit-tests against those, so the click target always matches what's on screen. The targets are cleared when the widget pass is skipped.display.info_widget = falsestarts with the panel hidden. The toggle key still shows it.Also:
info_widget::set_enabled, theInfoWidgetPositionenum (lenient, so an unknown value falls back to flow), docs in the default config, and a CHANGELOG entry.info_widget_data()is now fetched once, earlier indraw_inner(the pinned decision needs it), with its timing kept. The debug-capture "intrudes into content" check is skipped for pinned placements, since they own their column.Tests
pinned_column_needs_pinned_mode_and_room_for_the_chatpinned_widgets_stack_from_the_top_of_the_column: Overview first, one-cell gutter, mergeable widgets absorbed, gaps between widgets, all inside the column.pinned_column_too_short_places_nothingclose_button_sits_inside_the_top_right_corner: rect and hit-test bounds.rendered_widget_draws_the_close_button_where_it_is_hit_tested: renders to aTestBackendand reads[x]back from the cells the hit test uses.pinned_info_column_is_carved_off_the_right_edge,no_pinned_info_column_leaves_the_area_aloneinfo_widget_options_default_to_shown_and_flowing,info_widget_options_parse_and_unknown_position_falls_backLocal results (macOS, Rust 1.94.1):
cargo fmt --all -- --checkpasses.cargo clippy --locked --lib --all-targets -- -D warnings: nothing in the touched files. Everything it reports is in untouched files, which are green onubuntuCI.cargo test --lib --locked: 6,476 passed and 4 failed, all in untouched code and the same as onmain:login_openai_phase_is_default_when_no_importsand 3latex_imagetests that fail only in the parallel run.Live check in a 132-column pane (dev server on its own socket):
The prompt and a long multi-line notice (the free model was rate-limited) both wrapped before the column. A left click on
[x](sent as an SGR mouse sequence) hid the panel, and the transcript reflowed to full width.🤖 Generated with Claude Code