Skip to content

The Smooooth release

Compare
Choose a tag to compare
@willmcgugan willmcgugan released this 16 Feb 11:57
· 55 commits to main since this release
5e1aa4d

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

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 to Focus event to indicate if a widget is being focused because the app itself has regained focus or not #5379
  • Added Blurred message to Input widget (matching Submitted and Changed) to make it easier to synchronize with validate_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 and text-overflow CSS values #5485
  • Added Textual markup to replace Rich markup #5485
  • Added Content.from_markup #5485

Fixed

  • Fixed Pilot.click not working with times 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 and Input 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 a Blurred 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 with None
  • Implemented smooth (pixel perfect) scrolling on supported terminals. Set TEXTUAL_SMOOTH_SCROLL=0 to disable.

Removed

  • Breaking change: Removed wrap argument from OptionList (use CSS text-wrap: nowrap; text-overflow: ellipses)
  • Breaking change: Removed tooltip argument from OptionList. Use tooltip attribute or with_tooltip(...) method.