The Smooooth release
This is a big release!
- Arbitrary text selection. You can now select text, and hit ctrl+c to copy it to the clipboard. This works just about everywhere, although there a re a few widgets were it isn't yet implemented.
Screen.Recording.2025-02-16.at.11.59.14.mov
- Smoother scrolling, for Kitty, Ghostty, and some other terminals.
- New content system
- Many fixes, see the full changelog below...
Breaking change: Strings returned from render()
and other places will now be interpreted with Content.from_markup
, rather than Rich.from_markup
. This may result in slightly different colors, and emoji codes (like ":smiley:"
) will no longer be processed automatically. If you want to restore the old behavior you can return Rich.from_markup("Your output here")
rather than string literal.
Why 2.0.0 ?
It took us more than 3 years to get to 1.0. But a couple of months to get to 2.0? Why?
We follow Semver which says that after 1.0, all breaking changes bump the major version number. We have some breaking changes here, which will be trivial to fix -- if they effect you at all. But a breaking change is a breaking change!
2.0.0 - 2024-02-16
Added
- Added
Select.type_to_search
which allows you to type to move the cursor to a matching option #5403 - Added
from_app_focus
toFocus
event to indicate if a widget is being focused because the app itself has regained focus or not #5379 - Added
Blurred
message toInput
widget (matchingSubmitted
andChanged
) to make it easier to synchronize withvalidate_on
parameter when set to 'blur'. - Added
Offset.transpose
#5409 - Added
screen--selection
component class to define style for selection #5409 - Added
Widget.select_container
property #5409 - Added
Widget.select_all
#5409 - Added
Region.bottom_right_inclusive
#5409 - Added double click to select, triple click to select all in container #5409
- Added arbitrary text selection #5409
- Added Widget.ALLOW_SELECT classvar for a per-widget switch to disable text selection #5409
- Added Widget.allow_select method for programmatic control of text selection #5409
- Added App.ALLOW_SELECT for a global switch to disable text selection #5409
- Added
DOMNode.query_ancestor
#5409 - Added selection to Log widget #5467
- Added
text-wrap
andtext-overflow
CSS values #5485 - Added Textual markup to replace Rich markup #5485
- Added
Content.from_markup
#5485
Fixed
- Fixed
Pilot.click
not working withtimes
parameter #5398 - Fixed select refocusing itself too late #5420
- Fixed layout of the keys in the help panel when a key has a tooltip but no description #5436
- The content of an
Input
will now only be automatically selected when the widget is focused by the user, not when the app itself has regained focus (similar to web browsers). #5379 - Updated
TextArea
andInput
behavior when there is a selection and the user presses left or right #5400 - Footer can now be scrolled horizontally without holding
shift
#5404 - Modified _on_blur method in
Input
to post aBlurred
message - Fixed Log widget not refreshing on resize #5460
- Fixed special case with calculating the height of a container where all children have dynamic heights #5463
- Fixed scrollbars ignoring background opacity #5458
- Fixed
Header
icon showing command palette tooltip when disabled #5427
Changed
- Breaking change: OptionList no longer supports
Separator
, a separator may be specified withNone
- Implemented smooth (pixel perfect) scrolling on supported terminals. Set
TEXTUAL_SMOOTH_SCROLL=0
to disable.
Removed
- Breaking change: Removed
wrap
argument from OptionList (use CSStext-wrap: nowrap; text-overflow: ellipses
) - Breaking change: Removed
tooltip
argument from OptionList. Usetooltip
attribute orwith_tooltip(...)
method.