Releases: urwid/urwid
Releases · urwid/urwid
2.4.4
What's Changed
Bug fixes 🕷
- Fix regression: Columns render incorrect BOX/FLOW widgets height by @penguinolog in #754
Full Changelog: 2.4.3...2.4.4
2.4.3
What's Changed
New features 🗹
- Feature:
Overlay
typing and proper repr by @penguinolog in #741 - Feature: support proper
repr
andstr
forCanvas
by @penguinolog in #740 - Feature: Support FIXED and FLOW operations for
Overlay
depends on options by @penguinolog in #743 - Feature:
Columns
accept focus widget as "focus_column" by @penguinolog in #747 - Feature:
Filler
can act as FLOW widget by @penguinolog in #749 - Feature: allow explicit focus in
GridFlow
constructor by @penguinolog in #752
Bug fixes 🕷
Columns
support correct BOX render only if ALL BOX by @penguinolog in #746LineBox
: make side only if side elements present, fix pack by @penguinolog in #748- Update source package manifest to include
_web.js
and_web.css
by @Hook25 in #750 - Fix
ListBox.contents
: it should return final entity by @penguinolog in #751
Documentation 🕮
New Contributors
Full Changelog: 2.4.2...2.4.3
2.4.2
What's Changed
New features 🗹
- Feature: support FIXED-only widgets and FIXED rendering for Columns by @penguinolog in #731
- Feature: Support FIXED-only widgets and FIXED rendering for PILE by @penguinolog in #733
- FIX Padding: support FIXED render mode by @penguinolog in #734, #735, #737
- Feature: support FIXED render type for GridFLow by @penguinolog in #738
Now it possible to quick check incomplete widgets prototypes without size counting like:
>>> import urwid
>>> grid = urwid.GridFlow(
...: (urwid.Button(tag, align=urwid.CENTER) for tag in ("OK", "Cancel", "Help")),
...: cell_width=10,
...: h_sep=1,
...: v_sep=1,
...: align=urwid.CENTER,
...: )
>>> body = urwid.Pile(
...: (
...: (urwid.Text("Window content text here and it should not touch line", align=urwid.CENTER)),
...: (urwid.PACK, grid),
...: )
...: )
>>> widget = urwid.LineBox(
...: urwid.Pile(
...: (
...: urwid.Text("Some window", align=urwid.CENTER),
...: urwid.Divider("─"),
...: urwid.Padding(body, width=urwid.PACK, left=1, right=1),
...: )
...: )
...: )
>>> print(b"\n".join(widget.render(()).text).decode("utf-8"))
┌───────────────────────────────────────────────────────┐
│ Some window │
│───────────────────────────────────────────────────────│
│ Window content text here and it should not touch line │
│ < OK > < Cancel > < Help > │
└───────────────────────────────────────────────────────┘
>>> widget.pack(())
(57, 6)
Bug fixes 🕷
- BUG: Columns with GIVEN width == 0 should not count in rows by @penguinolog in #736
Refactoring 🛠
- Remove unused deprecated "test_suite" directive from setup.py by @penguinolog in #729
Full Changelog: 2.4.1...2.4.2
2.4.1
What's Changed
Bug fixes 🕷
- Fix Regressions in 2.4.0 by @penguinolog in #727
Full Changelog: 2.4.0...2.4.1
2.4.0
What's Changed
New features 🗹
- Basic Windows OS support in RAW and Curses display.
-
- Fully functional RAW display support. Thanks to @mhils (initial RAW display)
-
- Limited Curses support due to windows-curses limitation (mouse support limited). Thanks to @asmith-kepler (windows-curses monkeypatch)
-
- UTF-8 only
-
- Force
SelectorEventLoop
for asyncio under Windows if event loop is not set by @penguinolog in #715
- Force
- Feature: switch from
select.select
toselectors
by @penguinolog in #691 - Feature: support FIXED render mode for Text by @penguinolog in #610
- Feature: extend functional keys handling with key modifiers by @penguinolog in #705
- Add
run_in_executor
helper to the event loop by @penguinolog in #712 - Feature: Add internal logging for behavioral debug by @penguinolog in #708
-
- Feature: Use module path + class name for loggers and init once by @penguinolog in #720
- Feature: Implement
keypress
andmouse_event
default handlers by @penguinolog in #721 -
- Not subclassing
Widget
base class during custom widget implementation will produceDeprecationWarning
- Not subclassing
Deprecations ⚡
- Refactor: join display modules in package by @penguinolog in #655
-
- Backward-compatible. Main display modules import will not produce
DeprecationWarning
.
- Backward-compatible. Main display modules import will not produce
Documentation 🕮
- Fix #186 -
disconnect_by_key
should be exposed and use correct name by @penguinolog in #688 - Extend input_test example for better debug capabilities by @penguinolog in #713
-
- Support alternative event loops and debug logging.
Refactoring 🛠
- Refactoring: remove dead code from Raw display by @penguinolog in #707
Full Changelog: 2.3.4...2.4.0
2.3.4
What's Changed
New features 🗹
- Replace deprecated use of MultiError with exceptiongroup by @DRMacIver in #679
- Declare extension use Py_LIMITED_API explicit also in setup.py by @penguinolog in #686
Bug fixes 🕷
- use Hashable for signal identifier types by @ju1ius in #669
- Fix #674 : old versions of setuptools_scm support by @penguinolog in #675
- Fix WSL support: filter-out SI/SO in case of WSL by @penguinolog in #656
Documentation 🕮
Refactoring 🛠
- Maintenance: apply
refurb
fixes and tighten ruff by @penguinolog in #671 - Fix exception re-raise in trio event loop by @penguinolog in #683
Other Changes
- Maintenance: Tests: Use explicit encoding for tests by @penguinolog in #685
New Contributors
- @ju1ius made their first contribution in #669
- @vindolin made their first contribution in #676
- @DRMacIver made their first contribution in #679
Full Changelog: 2.2.3...2.3.4
2.2.3
What's Changed
New features 🗹
- Expose
widget
andevent_loop
packages by @penguinolog in #646 - Introduce optional dependencies for package by @penguinolog in #650
Deprecations ⚡
- Refactoring numedit: PEP8 arguments, allow negative, type casts by @penguinolog in #636
USE PEP8 compliant arguments and deprecate old one
Allow cast IntEdit to int and FloatEdit to float
Allow negative values without changing default behavior
Bug fixes 🕷
- Fix import from deprecated internal module by @penguinolog in #645
- Fix deprecated
_set_focus
method usage by @penguinolog in #662
Documentation 🕮
- Documentation: Sphinx can build gh-pages ready by @penguinolog in #643
- Documentation: generate changelog from GH releases by @penguinolog in #648
- Documentation: Use static default text in BigText demo by @penguinolog in #651
- Documentation Remove unneeded closing tags in TOC by @penguinolog in #652
- Fix tutorial: rename
attr
tourwid_attr
by @penguinolog in #653 - Documentation: TrioEventLoop is missed by @penguinolog in #642
Refactoring 🛠
- Refactoring: Force automated import sorting for all code by @penguinolog in #637
- Refactoring: Force automated black formatting by @penguinolog in #638
- Refactoring: Force
ruff
static checker for project by @penguinolog in #639 - Refactor: fixup usage of contextlib.suppress() by @ulidtko in #640
Full Changelog: 2.2.2...2.2.3
2.2.2
What's Changed
New features 🗹
- Feature: Support pack() for CheckBox/RadioButton/Button by @penguinolog in #621
Deprecations ⚡
- Mark
AttrWrap
asPendingDeprecation
by @penguinolog in #619
Bug fixes 🕷
- Fix font in case Font.data is
str
by @penguinolog in #618
Documentation 🕮
- Enforce examples code-style by @penguinolog in #620
- Documentation: do not use
FlowWidget
as base class in examples by @penguinolog in #623 - README: suggest python3-urwid for debian/ubuntu by @chronitis in #444
Refactoring 🛠
- Packaging: stop tests distribution as part of package by @penguinolog in #622
New Contributors
- @chronitis made their first contribution in #444
Full Changelog: 2.2.1...2.2.2
2.2.1
What's Changed
Bug fixes 🕷
- Fix: deep TextEnum was improperly resolved by @penguinolog in #609
Documentation 🕮
- Documentation: mention correct python versions by @penguinolog in #608
- Documentation: add stripped changelog for 2.2.0 by @penguinolog in #612
Refactoring 🛠
- Refactoring: use
super()
calls if possible by @penguinolog in #611 - Typing: Extend wimp typing annotations by @penguinolog in #604
Full Changelog: 2.2.0...2.2.1
2.2.0
Main changes
Compatibility
- Fix #583: python 3.12 compatibility by @penguinolog in #598
- Python 37+ migration, Python < 3.7 support dropped by @penguinolog in #522
- make tests compatible with Python 3.11 by @dotlambda in #517
- Deprecate legacy property creation by @penguinolog in #533
- Deprecate
__super
hack by @penguinolog in #538 - [BREAKING CHANGE] Fixes: #90 Remove idle emulation from asyncio event loop by @penguinolog in #541
New Features
- ZMQ event loop by @waveform80 in #362
- Add two fonts based on Unicode 13 2x3 TRS-80/Teletext mosaic characters by @rbanffy in #434
- Adds 256 color and truecolor support to vterm. Fixes #457 by @danschwarz in #559
- Vterm now emits 'resize' signal upon terminal resize by @danschwarz in #584
- vterm.py: Adds support for bracketed paste mode. Fixes #452 by @danschwarz in #594
- Pass SelectableIcon
align
andwrap
arguments to parent by @penguinolog in #599
Fixes
- fix: restore normal screen on ctrl-z by @proskur1n in #477
- Reconnect the 'modified' signal after setting a new ListBox.body by @exquo in #474
- Allow signal handling interoperability with raw display by @AnonymouX47 in #557
- Fix alternate/normal screen buffer switch for raw display by @AnonymouX47 in #556
- Fix text layout for
align="center", wrap="clip"
whenmaxcol
==line_width - 1
by @AnonymouX47 in #543 - Fix assertion failure when string contains SO but not SI by @mfncooper in #489
- Fix empty markup handling by @penguinolog in #536
- Resolve #499 and add tests by @djyotta in #500
- vterm: Fixed OSC 0,2 to set widget title properly (decode bytestring) by @danschwarz in #561
- vterm: Fixed a crash bug with DECALN command by @danschwarz in #560
- Fix #443 : export ELLIPSIS constant by @penguinolog in #527
- Fix: #445 - add
__len__
to listbox with validation if bodySized
by @penguinolog in #534 - Fix old_str_util.decode_one : support bytes and str as arguments by @penguinolog in #531
- Use
locale.getpreferredencoding(False)
if possible (most systems) F… by @penguinolog in #528 - Fix
TextCanvas
CanvasError("Attribute extends beyond text...")
by @penguinolog in #555 - Fix merging attributes while decomposing tag markup by @mandre in #507
- fix: use trio.lowlevel instead of trio.hazmat with Trio >= 0.15 by @ntamas in #439
- Fix TypeError in signals module on weak object finalize by GC by @rvtpro in #503
- Include _resize_pipe_rd in fd_list for _wait_for_input_ready for raw_display by @inducer in #453
- container: fix duplicate text by @vapier in #490
- Provide 80x24 fallback for ansi and vt100 by @roadriverrail in #465
Refactoring
- Use == instead of "is" for equality testing by @naglis in #431
- Split event loop in several modules by @penguinolog in #537
- Drop some compat for python < 2.6 by @dlax in #409
- Annotate types in simple cases and use isinstance (& protocol) based type checking by @penguinolog in #529
- Add type annotations and optimize
urwid.font
by @penguinolog in #540 - Related #583: Cleanup C helper from python2-only code by @penguinolog in #597
- Optimize
vterm
: adopt data types and add annotations. Fix tests by @penguinolog in #547 - Split widget and introduce base enums by @penguinolog in #595
Documentation and examples
- Use non deprecated template by @jspricke in #424
- Mention asyncio event loop compatibility in readme by @johtso in #463
- Fix documentation of TrioEventLoop.run_async() by @ntamas in #438
- Fix column label typo in tour example by @devfull in #473
- Update index.rst by @adbenitez in #504
- fix typo by @doctorcolossus in #493
- Update README.rst by @yhh2021 in #481
- docs: fix simple typo, incompatable -> incompatible by @timgates42 in #446
- Fixed twisted example: use
implementer
decorator instead of deprecatedimplements
. by @penguinolog in #591 - examples/terminal.py can run against older versions of Urwid again by @danschwarz in #596
- fix: update links to examples by @geier in #577
Other changes
- Test fixes by @penguinolog in #524
- Fix input handling and extra type annotations by @penguinolog in #530
- Fix regression:
Pile()
focus_item can be Widget -> need to set prop… by @penguinolog in #535 - Fix incorrect type cast in vterm (
apply_mapping
should returnbytes
) by @penguinolog in #545 - Return original code to the deprecated getters and setters by @penguinolog in #549
- Fix CheckBox default state validation and initialization by @penguinolog in #553
New Contributors
- @johtso made their first contribution in #463
- @devfull made their first contribution in #473
- @adbenitez made their first contribution in #504
- @doctorcolossus made their first contribution in #493
- @yhh2021 made their first contribution in #481
- @dotlambda made their first contribution in #517
- @rvtpro made their first contribution in #503
- @vapier made their first contribution in #490
- @proskur1n made their first contribution in #477
- @naglis made their first contribution in #431
- @dlax made their first contribution in #409
- @mandre made their first contribution in #507
- @timgates42 made their first contribution in #446
- @djyotta made their first contribution in #500
- @penguinolog made their first contribution in #523
- @exquo made their first contribution in #474
- @roadriverrail made their first contribution in #465
- @rbanffy made their first contribution in #434
- @mfncooper made their first contribution in #489
- @AnonymouX47 made their first contribution in #543
- @danschwarz made their first contribution in #559
- @dependabot made their first contribution in #570
Full Changelog: https://github.com/urwid/urwid/commits/2.2.0