• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

penguinolog / urwid
92%

Build:
DEFAULT BRANCH: master
Repo Added 20 Jun 2023 08:28AM UTC
Token nZ5xt2o2DKKtMXKnDA1uXfKzjCCxuWXzE regen
Build 1084 Last
Files 73
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • 2.4.1
  • 2.4.2
  • 2.4.3
  • 2.4.4
  • 2.4.5
  • 2.4.6
  • 2.5.0
  • 2.5.1
  • 2.5.2
  • 2.5.3
  • 2.6.0
  • 2.6.0.post0
  • 2.6.1
  • 2.6.11
  • 2.6.12
  • 2.6.13
  • 2.6.14
  • 2.6.15
  • 2.6.16
  • 2.6.2
  • 2.6.3
  • 2.6.4
  • 2.6.5
  • 2.6.6
  • 2.6.7
  • 2.6.8
  • 2.6.9
  • 3.0.0
  • 3.0.1
  • 3.0.2
  • 3.0.3
  • 3.0.4
  • 3.0.5
  • 4.0.0
  • 4.0.1
  • 4.0.10
  • 4.0.11
  • 4.0.12
  • 4.0.13
  • 4.0.2
  • 4.0.3
  • 4.0.4
  • 4.0.5
  • 4.0.6
  • 4.0.7
  • 4.0.8
  • 4.0.9
  • 4.1.0
  • 4.1.1
  • 4.1.2
  • 4.1.3
  • 4.1.4
  • 4.1.5
  • 4.1.6
  • 4.1.7
  • 4.2.0
  • 4.2.1
  • 4.2.2
  • 4.2.3
  • 4.2.4
  • 4.2.5
  • AttrMap_compat
  • ListBox_relative_scroll
  • add-xterm-insert-keypad-keys
  • add_run_in_exectutor
  • annotations
  • ansi-text-raw-display-attributes-3
  • artifacts_bdist
  • ascii-fallbacks
  • async_callbacks
  • async_in_event_loop
  • attr_shadow_attr
  • bar_graph
  • base_class_events
  • big_text_static_text
  • bigtext-fonts
  • black
  • bug_layout
  • bug_rows_max_listbox
  • bug_scrollable_no_size
  • build_limited_api
  • builld-system
  • bump_ruff
  • button-brackets-selectable-text
  • canvas_optimisation
  • changelog
  • changelog-5.0.0
  • changelog_406
  • changelog_407
  • changelog_501
  • changelog_gen
  • changelog_pre-release
  • check_mixed
  • ci/pypy-tests
  • ci_actionlint
  • ci_cd_extend
  • ci_cd_generate_changelog
  • ci_ci
  • ci_finalise_uv
  • ci_project
  • ci_py314
  • ci_tests
  • ci_try_enable_osx
  • ci_tuning
  • class_docstrings
  • classifiers
  • clean-up
  • clean_graphics
  • cleanup
  • cleanup_code
  • cleanup_helper
  • cleanup_unused
  • closed_io
  • code_cleanup
  • columns-hidden-columns
  • columns_accept_focus_widget
  • columns_consistency
  • columns_maxcol
  • columns_optimisation
  • columns_render
  • columns_special_case_fixed
  • columns_support_fixed
  • columns_zero_width
  • command-map-help
  • command_enum
  • command_map_api_extend
  • constants_symbols
  • container-focus-changed-hook
  • container_deprecated_setters
  • content_validation
  • corner_case_ellipsis_not_fit
  • cover_listbox_scrollable
  • coverage_no_tests
  • coverage_special
  • curses_fix
  • deduplicate
  • deprecate_content_delta
  • deprecate_progress_bar_set_done
  • deprecated_attr_wrap
  • deprecated_decoration
  • deprecated_fix
  • deprecated_positioning
  • deprecated_public
  • deprecation
  • deprecation-process-2
  • deprecation_binary_font
  • deprecation_deadline
  • deprecation_part0
  • deprecation_part1
  • deprecation_part2
  • deprecation_part3
  • deprecation_release_4
  • deprecation_super
  • deprecations
  • deprecations_for_5
  • deprecations_handle
  • deprecations_term_scroller
  • deque_walker_ansi_parser
  • descriptors
  • devcontainer
  • devcontainers
  • disallow_broken_wcwidth
  • display-leftovers-csi-key
  • doc
  • doc-draw-screen-thread
  • doc_env
  • doc_event_loop
  • doc_examples
  • doc_fix_typo
  • doc_raises
  • doc_windows
  • docs
  • docs_build
  • docs_changelog
  • docs_disconnect_by_key
  • docs_fixes
  • docs_readability
  • docs_screenshots
  • docs_scrollable
  • docstring-fields
  • docstrings
  • document_fix_graalpy
  • drop-down-widget
  • drop_c_helper
  • drop_unused
  • ds_store
  • edit-grapheme-cursor
  • edit-max-length
  • edit-postchange-intedit-ellipsis
  • edit-text-pos-readline-submit
  • edit_typing
  • editorconfig
  • empty_grid_flow
  • enable_typing
  • enable_windows_asyncio_tests
  • escape-sequence-fixes
  • escape_test
  • event_loop
  • event_loop_executor
  • example_browse
  • examples_code_style
  • examples_deprecated
  • exceptiongroup
  • expand_tabs
  • expose_widget
  • extend_scrollable
  • extended-keyboard
  • extra_input_handling
  • extra_tests
  • extra_typing
  • faint_extend
  • feat_font
  • feat_terminal_detection
  • feat_tornado
  • feature/ansi-osc8-hyperlinks
  • feature/inherit-attr
  • feature/osc8-hyperlinks
  • feature_canvas_repr
  • feature_fixed_text
  • feature_selectors
  • feature_wimp_pack
  • fix-ansitext-security
  • fix-asyncio-loop-cleanup
  • fix-attribute-defined-outside-init
  • fix-bargraph-security
  • fix-base-widget-mock-loop
  • fix-canvascache-leak
  • fix-columns-cursor-dropped-column
  • fix-columns-security
  • fix-deque-insert-index
  • fix-display-event-loop-typing
  • fix-edit-override-cursor
  • fix-edit-security
  • fix-event-loop-callbacks
  • fix-event-loop-stale-watch
  • fix-focus-list-pickle
  • fix-gpm-tracking
  • fix-gridflow-wheel-and-hidden-focus
  • fix-input-parser-crashes
  • fix-layout-attributes-invalidate
  • fix-listbox-emptied-body-focus
  • fix-listbox-focus-moves
  • fix-listbox-security
  • fix-macos-dev-tty-selector
  • fix-main-loop-cleanup
  • fix-mouse-tracking-restart
  • fix-numedit-negative-zeros
  • fix-osc-esc-termination
  • fix-pile-security
  • fix-popup-false-widget-and-stubs
  • fix-posix-input-read
  • fix-progressbar-security
  • fix-raw-display-c1-controls
  • fix-raw-display-fallback-size
  • fix-raw-screen-socket-cycle
  • fix-scrollbar-decorated-widget
  • fix-scrollbar-keypress-before-render
  • fix-setup-g1-hang
  • fix-signal-handler-races
  • fix-signals-leak
  • fix-terminal-keypress-before-render
  • fix-text-control-chars
  • fix-text-pack-tab-stops
  • fix-text-security
  • fix-tree-security
  • fix-watch-pipe
  • fix-widget-races
  • fix-win32-console-size
  • fix-win32-input-thread
  • fix-zmq-watch-keys
  • fix/deque-insert-index-pypy
  • fix/hidden-focus-candidates
  • fix/space-wrap-zero-width-before-break
  • fix/vterm-defects-2
  • fix_asyncio_del_closed_loop
  • fix_build_windows
  • fix_display_typing
  • fix_docstring_event_loop
  • fix_docstrings
  • fix_edit
  • fix_font
  • fix_import_warn
  • fix_imports_moved
  • fix_listbox_render_empty_elements
  • fix_overlay
  • fix_ovl_items_replace
  • fix_py312
  • fix_readme
  • fix_regressions
  • fix_rerais
  • fix_rle_product
  • fix_rows_typing
  • fix_ruff
  • fix_term_scroll
  • fix_toc_html
  • fix_tree_listbox_render_empty_elements
  • fix_zope.interface
  • fixed_flow_overlay
  • fixes
  • flow_filler
  • follow-end-walkers
  • frame_fix
  • frame_focus
  • get_cursor_coord
  • gitter_badge
  • glib_deprecation
  • graalpy-pickle-and-checker-fixes
  • grid_flow_support_fixed
  • gridflow_focus
  • handle_mypy_warnings
  • handle_non_subclassed_widget
  • html_fragment
  • html_fragment-deprecate_monkeypatch
  • implement_scrollbar_layout
  • imports_deprecation_warning
  • initial_mypy
  • integeredit-default-corner-cases
  • isort
  • iterable_microopt
  • join_display
  • khal_insufficient_padding_width
  • kill_py37_py38
  • labeler_scope
  • labeler_update_rules
  • last-row-zero-width-and-escapes
  • lazy_imports
  • lazy_load_explicit_package
  • lb_max_left_right
  • line_box
  • line_box_double_inheritance
  • line_box_replace
  • linebox-long-title
  • linebox-title-markup
  • listbox-empty-not-selectable
  • listbox-fixes
  • listbox-flow-render
  • listbox-scroll-and-search
  • listbox_contents
  • listbox_guard_walker
  • listbox_tests
  • live-container-selectable
  • logging
  • mainloop-paused-context
  • maintenance_code_quality
  • maintenance_internal
  • maintenance_labeler
  • maintenance_pre_commit
  • maintenance_pyproject
  • maintenance_pytest
  • maintenance_ruff
  • maintenance_rules
  • maintenance_typing
  • maintenance_yamllint
  • master
  • meta_super_position
  • missed_test
  • missed_tests
  • monitored_list_move
  • monkeypathch_pad
  • move_listbox_tree
  • mro_simplefocuslistwalker
  • mypy_global_fixes
  • mypy_warnings
  • name-dec-private-modes
  • nested_popups
  • numedit
  • optimisations
  • optimise_signals
  • optional_dependencies
  • outdated-scripts
  • overlay-menu-signal
  • overlay_typing_repr
  • pack_extra
  • pack_on_edit
  • packaging_setup
  • packaging_tests
  • packaging_unstable_test
  • padding_given
  • padding_pack_weight
  • padding_support_fixed
  • palette-hashable-names
  • part_f_keys
  • part_osx
  • pep_424_lazy
  • pile_support_fixed
  • poc_gen_changelog
  • popup-launcher-close-on-menu
  • posix_raw_display_optimise
  • pr_template
  • pre-412
  • pre-release_changelog
  • pre_305
  • pre_4.0.2
  • pre_4010
  • pre_4011
  • pre_4012
  • pre_4013
  • pre_404
  • pre_405
  • pre_409
  • pre_410
  • pre_411
  • pre_413
  • pre_414
  • pre_415
  • pre_416
  • pre_417
  • pre_420
  • pre_421
  • pre_422
  • pre_423
  • pre_424
  • pre_425
  • pre_release
  • prep_2_2_2
  • prep_403
  • prepare_408
  • provisional_typing
  • py311_migration_single
  • py312_no_bdist
  • py313
  • py_version_description
  • pydocstyle
  • pylint
  • pylint_silence
  • pylint_warnings
  • pyrefly
  • pyrefly-unused-ignores
  • pyright-typing-fixes
  • raw_display_optimization
  • raw_display_var_naming
  • raw_display_windows_resize
  • raw_input_optimizations
  • ref_dead_code
  • refactor_scrollable
  • refactor_super
  • refactoring_code_style
  • refurb
  • refurb_fixes
  • regression_enums
  • regression_linebox
  • regression_ovl_relative
  • regression_treetools
  • regressions
  • rel_3.0
  • rel_3.0.1
  • rel_3.0.2
  • relnotes-release
  • remove_temporary_dev_script
  • requirements_security
  • restore_palette
  • restore_win32_support
  • rich_repr
  • ruff
  • ruff_0_2
  • ruff_bump
  • ruff_up
  • ruff_update
  • screenshots_trminus
  • scrollable
  • scrollable_annotations
  • scrollable_bar
  • scrollable_bug
  • scrollable_listbox
  • scrollbar-always-visible
  • scrollbar-cursor-coords
  • scrollbar-end-markers
  • scrollbar-zero-rows
  • scrollbar_estimated_size
  • security_rules
  • select-nav-wrap-around
  • select-navigation
  • selectable_icon
  • setuptools_scm_api
  • sgrmouse_shift_handle
  • shard_body_row_fix
  • shards-zero-row
  • shards_inconsistency
  • signals_subclass_abc
  • sigstp
  • simplify_code
  • sizing_columns
  • sizing_container_list_contents
  • sizing_fixes
  • slots-safe-places
  • special_case_empty_columns_pile
  • sphinx_build_gh_pages_ready
  • split_widget_enums
  • static_check_fix
  • static_checks
  • static_fix
  • static_fixes
  • static_update
  • stop_monkeypatch
  • str_optimise
  • strict_mypy
  • strict_typing
  • subiquity-inspired-bugfixes
  • support_sync_output
  • symbols_use_dataclass
  • table
  • terminal-demo-mouse
  • terminal-modified-keys
  • terminal-mouse-forwarding
  • terminfo-colors
  • terminfo-device-safety
  • test_req_fix
  • test_tree
  • test_vterm
  • testing-module
  • tests
  • tests_display_restart
  • tests_explicit_encoding
  • tests_org
  • tests_organisation
  • tests_windows
  • text-layout-cache-thread-safety
  • text_fixed_api
  • text_layout
  • text_layout_encoding
  • text_pack
  • tox_envs
  • tree
  • tree-navigation-helpers
  • tree_undeprecate
  • treetools_coverage
  • treetools_regression
  • trio_typing
  • type_annotations_trivial
  • typing
  • typing-delegate-mixin
  • typing_
  • typing_attr_map
  • typing_attr_wrap
  • typing_bar_graph
  • typing_big_text_progress_bar
  • typing_canvas
  • typing_containders
  • typing_display
  • typing_errors
  • typing_escape
  • typing_event_loop
  • typing_examples
  • typing_filler_
  • typing_fixes
  • typing_generic
  • typing_glib_loop
  • typing_issues
  • typing_listbox
  • typing_literal_constants
  • typing_monitored_list
  • typing_part_listbox
  • typing_polish
  • typing_radiobutton_checkbox
  • typing_silence
  • typing_split_repr-command_map
  • typing_text
  • typing_util_part_canvas
  • typing_widget
  • typing_widget_decoration
  • typing_widget_vterm_edit
  • typing_wimp
  • typo_job_name
  • un-deprecate_user_arg
  • unfocused-focus-attr
  • unicode_line_breaks
  • unicode_table
  • unicode_win
  • unwarn_escape
  • update-static-checkers
  • update_black
  • update_checkers
  • update_screenshots
  • upload_download_artifact
  • use_base_class_for_row_display
  • uuid_as_signal_key
  • vterm-alt-screen-kitty-keys
  • watch_pipe_implicit_none
  • wcwidth_unicode_auto
  • web_display
  • web_display_fixes
  • web_display_id
  • web_display_init
  • web_encoding_handling
  • web_resize
  • weight_float
  • wheels_only_upstream
  • widget-disable-toggle
  • widget_like
  • widget_mouse_keypress
  • widget_type
  • win_support_mark
  • window_resize_trottle
  • windows_asyncio
  • windows_curses
  • windows_event_debug
  • windows_garbage_commands
  • windows_last_line
  • windows_use_unicode_input
  • workflow_labeler
  • wsl_fix
  • zmq_loop_async

30 Oct 2026 04:35PM UTC coverage: 91.581% (+0.4%) from 91.205%
41092197401

push

github

web-flow
Add Table: rows of cells under a header with shared column widths (#1550)

* Skip every zero-width column in Columns keyboard navigation

The focus moves only to columns the last layout drew, since a column the
user cannot see must not take input.

- Columns records the widths of its last layout, also those returned by
  an overridden column_widths(), and the focus moves skip every column
  that is 0 wide or was not laid out.
- This replaces the two hidden-column sets: a column dropped for lack of
  room, or a pack column that is 0 wide until focused, is no longer
  reachable by keys until the Columns is wide enough to draw it.
- A Columns wider than the screen therefore no longer scrolls to its
  hidden columns when the focus moves.

* Add Table, rows of cells under a header with shared column widths

Table draws a fixed header over a scrolling body of rows whose columns
share their widths, as box, flow and, without weighted columns, fixed
widget.

- TableColumn gives a column a packed, given or weighted width, a
  minimum, and the align and wrap of its text cells.
- TableLayout, exported from urwid.widget, computes the shared widths
  for rows used without a Table, such as form labels in a Pile.
- TableRow carries a data object, its own attribute maps and whether it
  is selectable; Table.body turns plain sequences into rows and rejects
  an invalid change before it is applied.
- Cells are measured once; text cells the table made measure themselves
  again when their text changes, other widgets need invalidate_widths().
- Table sends "focus changed" and "activate", keeps the focused row
  marked while unfocused, and offers max_rows, row_attr, select
  navigation across cells, a scrollbar and rows spanning all columns.
- The manual, the reference, the tour and the container diagram show it.

* Remove the outdated .xcf sources of the widget diagrams

The diagrams are drawn from the .svgz files, and the .xcf copies no
longer matched them.

5995 of 6734 branches covered (89.03%)

Branch coverage included in aggregate %.

595 of 600 new or added lines in 2 files covered. (99.17%)

90 existing lines in 10 files now uncovered.

15020 of 16213 relevant lines covered (92.64%)

15.5 hits per line

Relevant lines Covered
Build:
Build:
16213 RELEVANT LINES 15020 COVERED LINES
15.5 HITS PER LINE
Source Files on master
  • Tree
  • List 73
  • Changed 20
  • Source Changed 18
  • Coverage Changed 20
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
41092197401 master Add Table: rows of cells under a header with shared column widths (#1550) * Skip every zero-width column in Columns keyboard navigation The focus moves only to columns the last layout drew, since a column the user cannot see must not take input.... push 30 Oct 2026 04:42PM UTC web-flow github
91.58
41089030617 table Remove the outdated .xcf sources of the widget diagrams The diagrams are drawn from the .svgz files, and the .xcf copies no longer matched them. push 30 Oct 2026 04:22PM UTC penguinolog github
91.58
41070128776 unfocused-focus-attr Drop a pylint suppression the project configuration makes useless pylint's too-few-public-methods is disabled project-wide, so CI reported the inline suppression on _UnfocusedFocusAttrMixin as I0021 useless-suppression. push 30 Oct 2026 02:16PM UTC penguinolog github
91.32
41069561504 unfocused-focus-attr Accept a dict attribute map in AttrMap's type annotations AttrMap's map parameters were typed Hashable | Mapping[Hashable, Hashable], which mypy rejects for the most common call, AttrMap(w, {"a": "b"}): Mapping is invariant in its key, and a dict... push 30 Oct 2026 02:11PM UTC penguinolog github
91.32
41059758232 linebox-long-title Cut a LineBox title wider than the box with an ellipsis A title wider than the top line wrapped onto rows without side borders, broke the box render, and a centred or right-aligned title that did not fit vanished. - The title Text uses the ellip... push 30 Oct 2026 01:02PM UTC penguinolog github
91.29
41057162018 overlay-menu-signal Send "menu" from Overlay for an unhandled Esc Dialogs built as an Overlay all close on Esc by hand. Overlay now sends "menu" when its top widget leaves a key for the menu command (Esc by default) unhandled: - Handlers receive the overlay; one re... push 30 Oct 2026 12:41PM UTC penguinolog github
91.27
41038474823 fix-layout-attributes-invalidate Redraw widgets when layout attributes are assigned Assigning a layout attribute of a rendered widget kept serving the cached canvas and rows(). These attributes now invalidate the widget on assignment: - BoxAdapter.height - Divider.div_char, top... push 30 Oct 2026 10:09AM UTC penguinolog github
91.27
41034462310 fix/hidden-focus-candidates Skip hidden Pile rows and Columns columns in focus moves A row or column the layout draws 0 high or 0 wide, and that focusing would not show, is now treated the same in every sizing mode. - Initial focus skips such children unless no other child... push 30 Oct 2026 09:36AM UTC penguinolog github
91.29
41030506078 fix-listbox-focus-moves Report one focus move when ListBox completes set_focus ListBox.set_focus() moves the body's focus at once and places it on the next render. That render moved the body's focus back to the old position and forward again to measure the layout, so wa... push 30 Oct 2026 09:03AM UTC penguinolog github
91.21
40869184213 master Prepare release 5.0.1 (#1542) Bugfixes only push 29 Oct 2026 11:57AM UTC web-flow github
91.21
See All Builds (1024)

Badge your Repo: urwid

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc