You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/05/13 19:53:00 UTC
[jira] [Updated] (CAMEL-23512) camel-jbang-plugin-tui: TamboUI API misuse, Unicode bugs, and improvements
[ https://issues.apache.org/jira/browse/CAMEL-23512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-23512:
--------------------------------
Affects Version/s: 4.21.0
> camel-jbang-plugin-tui: TamboUI API misuse, Unicode bugs, and improvements
> --------------------------------------------------------------------------
>
> Key: CAMEL-23512
> URL: https://issues.apache.org/jira/browse/CAMEL-23512
> Project: Camel
> Issue Type: Improvement
> Components: camel-jbang
> Affects Versions: 4.21.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.21.0
>
>
> The camel-jbang-plugin-tui module has several issues related to TamboUI API usage identified through code review.
> h3. Bugs
> # {{CamelCatalogTui}} uses the deprecated {{KeyEvent.character()}} API (lines 380, 382) which cannot handle supplementary Unicode code points. Should use {{ke.string()}} instead.
> # {{TuiHelper.truncate()}} uses {{String.length()}} and {{String.substring()}} for display truncation instead of TamboUI's {{CharWidth}} utilities. This causes incorrect display with CJK characters and emoji. Should use {{CharWidth.truncateWithEllipsis()}}.
> # {{CamelCatalogTui.wrapText()}} and {{flowFields()}} use {{String.length()}} for width calculations — same CharWidth violation.
> # {{CamelMonitor.styleDiagramLine()}} uses {{line.length()}} for horizontal scroll width calculation instead of {{CharWidth.of()}}.
> # {{CamelMonitor.renderProcessors()}} and {{renderRouteHeader()}} create a {{new TableState()}} on every render frame, preventing any selection state from persisting in those tables.
> # {{CamelMonitor}} handles {{MouseEvent}} for diagram scrolling but creates {{TuiRunner}} with default config which has {{mouseCapture=false}}, so mouse events never arrive.
> h3. Improvements
> * Manual word wrapping in {{CamelCatalogTui}} could use TamboUI's built-in {{Paragraph}} with {{Overflow.WRAP_WORD}} instead of the custom {{wrapText()}} method.
> * Manual description scrolling could use Paragraph's built-in {{scroll()}} method instead of manually slicing the lines list.
> * Raw {{KeyCode}} checks could use TamboUI's semantic bindings ({{ke.isPageUp()}}, {{ke.matches(Actions.*)}}) to respect user-configured key bindings (vim, emacs).
> * {{refreshData()}} and {{pollJsonResponse()}} perform blocking I/O on the render thread, which can freeze the UI. Should use the scheduler for background work with {{runOnRenderThread()}} callback.
> * Separator line manually drawn with box-drawing character repetition could use {{Block}} with {{Borders.TOP_ONLY}}.
> * Footer rendering has approximately 100 lines of duplicated patterns that could be simplified with a helper method.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)