Repository navigation
fix(deps): update dependency @opentui/core to v0.7.0 - #465
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
from
August 24, 2026 19:06
d94b49b to
5718e8e
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
3 times, most recently
from
August 27, 2026 06:17
3787cdd to
658be89
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
12 times, most recently
from
August 31, 2026 05:12
3f9cf28 to
b75c4b8
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
7 times, most recently
from
September 6, 2026 06:06
9171811 to
01bcfd1
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
3 times, most recently
from
September 8, 2026 02:01
f1e9d16 to
58804d7
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
16 times, most recently
from
September 21, 2026 17:03
d80a780 to
24295eb
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
2 times, most recently
from
September 22, 2026 22:43
f4a813d to
e075063
Compare
renovate
Bot
force-pushed
the
renovate/opentui-core-0.x
branch
10 times, most recently
from
September 29, 2026 20:56
70d54ba to
0354525
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
0.5.10→0.7.0Release Notes
anomalyco/opentui (@opentui/core)
v0.7.0Compare Source
Before 0.7.0, typing one character in a 10,000-line Textarea laid out all 10,000 lines before the key call returned, and the Yoga measure of the next frame walked them again. Typing and pasting slowed down with the size of the document, and word wrap paid the most. In 0.7.0, an edit only records that the view must scroll to the cursor. The layout runs once, at the next read of the viewport or the visual cursor, or at the next frame. It compares the text with the text of the last layout and lays out only the lines around the change. An insert, a delete, an undo, or a join lays out one line. Enter lays out two lines, and a 100-line paste lays out 101.
A read that needs the layout still pays for it.
visualCursorlays out the text when an edit is pending.cursorOffsetreads the logical cursor and does not lay out the text. To check after each key whether the cursor is at the start of the text, comparecursorOffset:Before 0.7.0,
Renderablefound the hooks of each node by reflection. It scanned the property descriptors of every new instance two times. For 10,000 rows of a Text subclass that overridesrenderSelf, this took 20,000 scans and 160,000 descriptor reads. Now a node reads its hooks from its class once, at construction. Prototype methods withsuper, constructor options, and assignments torenderBefore,renderAfter,onLifecyclePass, andonSizeChangework as before.Three kinds of code must change. First, a hook that you add by reflection does nothing until you call
node.refreshHooks(). Examples are an instance class field,Object.defineProperty(), or an assignment to therenderSelforonUpdateof one node. Second, a patch or spy on a prototype method after nodes exist does not reach those nodes, and untyped JSX props such asonUpdateandonResizehave no effect. Third,renderBefore,renderAfter, andonLifecyclePassare now accessors. A class field that overrides one of them is a TypeScript error, so assign the hook in the constructor. AnonLifecyclePassclass field still runs, because attaching the node registers it.A class that used
defineNativeIntegration()must now declare the description directly. Without the type annotation,kinddoes not keep its literal type:The
nativeSceneWorkBudgetrenderer option let a frame yield to the event loop during native preparation. OpenTUI, its SSH package, and OpenCode did not set it. On a 10,000-line log, it cut the longest native slice by about 0.15 ms but used 27% more native time. With one mutation per event-loop turn, each yield started preparation again, until the frame failed withLayoutLimit. A renderer that scrolled or streamed under a budget showed no frames. Now preparation and paint finish in one call. A C binding built against the old header passes every argument after the removedmax_work_itemsone slot off, so the ABI version changes. To update a binding, generate it again from the newopentui.h. Then remove themax_work_itemsargument and anyOT_SCENE_FRAME_YIELDcase, and use the 224-byteot_scene_statsrecord. Thework_budgetofot_session_pumpis a different budget and does not change.0.7.0 also adds a native input parser. The TypeScript parser parses each framed unit again with regular expressions, and its structure caused bugs that are hard to fix in place. These bugs include lost Escape-prefixed events, empty Alt key names, wrong Alt keys for non-ASCII characters, wheel releases that ended drags, and negative X10 coordinates. The native parser is a bounded state machine that does not allocate, and it handles all of these cases. It is off by default while timing and buffering edge cases are tested. To try it, set
OTUI_NATIVE_INPUT_PARSER=1or create the renderer with the option:With
OTUI_NATIVE_INPUT_SHADOW=1, the renderer also runs the other parser. It writes a[stdin-shadow]warning for each event that the two parsers report differently. The warnings contain your input, so protect them as you would a stdin log. To report a parser bug, include a log fromOTUI_STDIN_LOG. The native parser is bounded, so it ignoresstdinParserMaxBufferBytes.Known issue: when the terminal hangs up, as when an SSH connection closes, the renderer prints
Error disabling raw modeandNative scene shutdown failederrors with stack traces to stderr. The process still exits with code 0.Breaking changes
nativeSceneWorkBudgetthrows at construction, so remove the option.NativeSceneFrame.Yieldand themaxWorkItemsargument ofFFIRenderLib.sceneFrameStep()are removed. See How Core uses native. (#1719)NativeSceneFrameRequest.geometryRevisionis removed. See How Core uses native. (#1760)ot_scene_frame_step_with_geometryno longer has itsmax_work_itemsparameter,OT_SCENE_FRAME_YIELDis removed, andOT_CONTEXT_ABI_VERSIONis 2. Build bindings again from the newopentui.h, because records with version 1 fail withOT_UNSUPPORTED_VERSION. See C. (#1719)ot_scene_statschanges from 64 to 224 bytes, andot_scene_get_statsreturnsOT_INVALID_ARGUMENTfor the 64-byte record. Generate the record again from the new header. See Frames and output. (#1722)Context.sceneFrameStepWorkBudgetedis removed,sceneFrameStepWithRecordingno longer takesmax_work_items, andreplaceOwnedStyledTextno longer takes aSyntaxStyle.OwnedStyledChunknow holds a style value, and the module no longer exports 12 extra span-feed symbols. See Zig. (#1719, #1768, #1784)Renderable.defineNativeIntegration()andNativeRenderableIntegration.constructionare removed. Declarestatic override readonly nativeIntegration: NativeRenderableIntegration = { ... }withoutconstruction. See Custom renderables. (#1754)refreshHooks(). A class field that overridesrenderBefore,renderAfter, oronLifecyclePassis a TypeScript error (TS2610), so assign it in the constructor. See Custom renderables. (#1754)TextBufferRenderable._textBufferSyntaxStylefield is removed. Styled text keeps its styles in the text buffer, so remove code that reads the field. See Code. (#1775)translateXandtranslateYthrowRangeErrorfor values outside the 32-bit float range of the layout setters. Before, such values did not paint. See Layout. (#1682)Added
experimental_nativeInputrenderer option, orOTUI_NATIVE_INPUT_PARSER, parses stdin with a new native parser.OTUI_NATIVE_INPUT_SHADOWruns both parsers and logs each event that they report differently. See Environment variables. (#1592, #1787)ot_session_input_feed()parses terminal input into caller-ownedot_input_eventrecords, a payload buffer, and anot_input_drainsummary, and it does not allocate.ot_session_input_expect()sets the replies that the parser expects, andot_session_input_reset()clears the parser state.FFIRenderLib.sessionInputFeed(),sessionInputExpect(), andsessionInputReset()wrap them. See Host I/O and time. (#1592)getNativeStats().frameWork, also ingetStats(), counts the work of the last presented scene frame, such as Yoga solves, view preparations, and painted cells. The test renderer optionnativeSceneFullFramemakes each frame rebuild its work lists, so tests can compare the counts. See Rendering diagnostics. (#1722)ot_scene_statsreports the work of the last presented scene frame.ot_scene_set_debug_flags()withOT_SCENE_DEBUG_FULL_FRAMEforces the full frame path, andfull_path_reasonsuses theOT_SCENE_FULL_PATH_*bits. See Frames and output. (#1722)_paintWidthand_paintHeightofRenderablegive the size that arenderSelf()paints, clamped to the cell range that drawing accepts. See Custom renderables. (#1682)Changed
textAlign,truncate,tabIndicator,tabIndicatorColor, and the editor scroll margin. See Rendering pipeline. (#1755, #1767, #1774)wrapMode: "none", a line that is scrolled right skips the text to the left of the viewport by chunk and cluster. An idle editor with one 256 KiB line no longer walks the line on each frame. See Textarea. (#1777)x,y,width, andheightuse the cached layout without a native call or a flush.getLayout()andgetComputedLayout()call native code on every call, and a rejected staged write shows at the next flushing call. See Layout. (#1760)box.widthwrite with a flush takes 111 ns instead of 149 ns. A paint value that only native code rejects, such as an opacity above 1 passed tosetNativeScenePaint, fails at the next flush. See Rendering pipeline. (#1770)Codecreates two native objects instead of three. A highlight update no longer copies the style table or scans the object table. See Code. (#1768, #1775)onMouseScrollhandler of an ancestor still receive it. Text, Code, and Textarea treat Shift+wheel as sideways, and an editor's sideways step stops at its widest line. See ScrollBox. (#1761)wcwidth, so under tmux and screen ❤️ is still one cell too narrow, until OpenTUI selects the width method correctly. In classic Windows conhost, which gives VS15 its own cell, 53 of these symbols followed by VS15 are now one cell off. Some terminals draw a glyph wider than the one cell that they advance, so it covers the next character, extends into a blank cell, or is cut off; this comes from the terminal, not from the layout. See Text and terminal cells. (#1762)detectLinks()styles bare URLs withmarkup.link.labelfrom the newsyntaxStylecontext field and keeps their other attributes. Bare URLs in Markdown prose now look like link labels. See Markdown. (#1765)maxProbeBytesrejects with the decoder error. Before, it could play a truncated prefix and end without an error. See Streaming audio. (#1759)CSI g, DECRQM, and other controls now behave as in xterm. XTGETTCAP answers from Ghostty's terminfo, which claims some features that the embedded terminal does not draw. See Embedded terminal. (#1714)OT_STYLE_RUN_FLAGbit, and user highlights reject such style ids. Styled text no longer registerschunkNstyles in the attachedSyntaxStyle, andot_text_buffer_clearwithout reset keeps styled highlights but drops their links. The styled-text batch accepts buffers that have an attached style. See Editing buffers and views. (#1768)ot_editor_view_get_viewport,ot_editor_view_set_scroll_margin, and a localot_editor_view_selectcan lay out text and returnOT_OUT_OF_MEMORY. This occurs only while a scroll to the cursor is pending. See C. (#1751)ot_scene_set_paintrejects a translation that is not finite or exceedsFLT_MAX,ot_scene_set_stylestores finite margin, padding, position, and gap values beyond ±1e30 as ±1e30, andOT_LAYOUT_PAINTclamps an axis outside the 32-bit cell range. See C. (#1682)Fixed
yoga.tsAPI keeps the upstream rounding. See Layout. (#1728)left = 2 ** 31 - 1ormargin = 1e15, no longer makes every later frame fail withInvalidArgument. Native code clamps only the geometry that it paints, clips, and hit-tests. See Layout. (#1682)wcwidthwidth method,drawTextandencodeUnicodegive a multi-code-point cluster, such as 👩💻, the same width as the layout. Before, text after the cluster landed two cells to the left. Clusters wider than four cells, such as 👨👩👧, are still drawn too narrow. See Text and terminal cells. (#1773)ScrollBarposition is never negative. Before, a ScrollBox with content that fit the viewport could report ascrollToporscrollLeftsuch as -7 while its content did not move. A ScrollBar'sonChangevalue andscrollPositionnow agree, and with sticky bottom over short content, a sideways scroll no longer stops the box from following new content. See ScrollBar. (#1769)destroy()leaves raw mode after the Session restores the terminal, andresume()enters raw mode before mouse reporting starts again. Before, mouse reports could show as text such as^[[<35;30;5Mat the shell prompt.suspend()still leaves raw mode at once, so mouse reports can still echo there. See Lifecycle and cleanup. (#1720)Audio.playStream()with an MP3 whose first chunk is larger than the decoder probe limit always rejects with{ action: "decoder", errorCode: -3 }. Before, it sometimes rejected with{ action: "write", status: -1 }, depending on thread timing. See Streaming audio. (#1759)onContentChangeandline-info-changerun. Before, an app that synced on content changes kept the text from before the undo, and the line-number gutter kept its old width. See Textarea. (#1790)onLifecyclePassbefore its first frame gets its firstonResize. Before, a buffered node kept its old buffer size and clipped its drawing. See Custom renderables. (#1754)SyntaxStylekeep their own styled-text colors. Before, each update of one buffer changed the colors of the other. See Editing buffers and views. (#1768)EmbeddedTerminalRenderable, RIS (ESC c) and DECSTR (CSI ! p) reset the palette that a program set with OSC 4, and keep the OSC 10, 11, and 12 colors. Tools such askitten icatnow use their text fallback and do not show blank cells. See Embedded terminal. (#1714)API changes and documentation: https://opentui.com/docs/releases/0.7.0
What's Changed
New Contributors
Full Changelog: anomalyco/opentui@v0.6.8...v0.7.0
v0.6.8Compare Source
Fixed
TextorCodewithwrapMode: "none"andtruncate: trueby one column. A text with a sideways offset now returns to column 0 whentruncatebecomestrueorwrapModechanges to"word"or"char". (#1745)API changes and documentation: https://opentui.com/docs/releases/0.6.8
What's Changed
Full Changelog: anomalyco/opentui@v0.6.7...v0.6.8
v0.6.7Compare Source
In 0.6.6, OpenTUI gave the text
a\u200Ebcdefseven cells, but the terminal drew it in six. U+200E, the left-to-right mark, is one of Unicode's default-ignorable code points, and terminals draw these in no cell. OpenTUI gave each of them one cell. As a result, it placed the rest of the row one column right of where the terminal drew it. A full frame looked correct, but the next partial update did not: in Ghostty, changing theftoZshowedabcdefZ. Hebrew and Arabic text often carries direction marks, so these rows broke when they were updated. In 0.6.7, every default-ignorable code point takes no cell. Layout, cursor movement, drawing, andencodeUnicodeuse the same width, so they agree. Two exceptions remain. The soft hyphen U+00AD keeps one cell, because terminals draw it. The conjoining Hangul fillers U+115F and U+1160 keep their widths, because each starts a syllable cluster.When more code points have zero width, an editor bug becomes more common. In 0.6.6, a Textarea line that started with U+200B trapped the cursor. Right did not move past it from column 0, and Delete did nothing there. No key could delete a line that held only zero-width text. Without a fix, a Hebrew line that starts with U+200F would act the same way. 0.6.7 fixes both cases. A border character must still fill exactly one cell, so a
customBorderCharsentry such as U+200E or U+FFA0 is now an error. Before, it gave a misaligned border. Replace it with a character that takes one cell, such as a space.A terminal reports mouse motion only when the pointer enters a new cell. In 0.6.6, the renderer gave a left-button drag to the renderable under the first motion report. A fast drag on a one-column ScrollBox scrollbar thumb often reported its first motion over a neighbor. The bar then did not scroll, and the thumb kept its dragging state. Now the renderable that receives the left press owns the drag. If the press hit nothing, or its renderable was destroyed, the renderable under the pointer is the source, as before. A press that starts or extends a text selection still follows the selection path.
registerBaseLayoutFallback()is for keyboard layouts that cannot type the character of a binding. On a Russian layout, Ctrl+с must still runctrl+c. In 0.6.6, the addon used the Kitty base-layout key for every chord that had no direct binding. On Dvorak, Ctrl+J then ran actrl+cbinding, Ctrl+E ranctrl+d, and Ctrl+; ranctrl+z. The addon now uses the same rule as Core's key bindings. It falls back only when the typed key is one non-ASCII character, or when the base-layout key is a digit. The digit case is for AZERTY, where the digit keys type& " ' ( - _and Ctrl+& must still matchctrl+1. Some punctuation on non-Latin layouts still does not fall back, for example Hebrew'on the W key.In
@opentui/react, eachroot.render()call created a new reconciler container. It dropped the old tree and did not run its effect cleanups. A later call now updates the mounted tree, asreact-domdoes:An explicit
root.render()also resets the internal error boundary. If a tree failed with an uncaught error, the next call tries it again.OpenCode draws each diff hunk as a separate
DiffRenderable. To line up the gutters, it put an invisible sign on line-1and measured the gutters again after mount. The newgutteroption sets that layout directly:minDigitsalways reserves the+/-sign column. Thus both code columns start at the same cell, also when a hunk has no signs. Line-1still works, for compatibility.Breaking changes
customBorderChars, such as U+200E or U+FFA0, throwsInvalidArgumentat creation, anddrawGridrejects such a character. Use a border character that takes one cell. See Box. (#1675)Added
gutteroption and property ofDiffRenderablesetpaddingLeft,paddingRight, andminDigitsfor the line-number gutter. Diffs with the sameminDigitsalign their code columns. See Diff. (#1684)LineNumberRenderable.getGutterLayout()andsetGutterLayout()read and set the gutter padding, minimum digits, and minimum widths as aGutterLayout. See Line number gutter. (#1684)Changed
root.render()updates the mounted tree, keeps component state, and tries again after a tree that failed with an uncaught error. Effects clean up when the tree is replaced, onroot.unmount(), and onrenderer.destroy(). See React bindings. (#1692)registerBaseLayoutFallback()uses the base-layout key only when the typed key is one non-ASCII character or the base-layout key is a digit. Dvorak Ctrl+J now matchesctrl+j, notctrl+c. See Built-in keymap addons. (#1718)Fixed
encodeUnicode. Before, a partial update of a row with such a mark wrote one column to the right. See Text and terminal cells. (#1675)invalidateIntrinsicSize(). See Custom renderables. (#1680)dropand a secondup. See Interaction, focus, and selection. (#1716)ctrl+1. They no longer fall back to a space base-layout key. See Keyboard input. (#1718)registerBaseLayoutFallback()no longer throws or reports anevent-match-resolver-errorwhen the base-layout key is a space. See Built-in keymap addons. (#1718)-0integer argument goes to native code as 0. Before, calls such asEditBuffer.setCursor,pushScissorRect, andCliRenderer.hitTestthrewTypeError: Argument N must be an int32. See Runtime and platform support. (#1709)API changes and documentation: https://opentui.com/docs/releases/0.6.7
What's Changed
Full Changelog: anomalyco/opentui@v0.6.6...v0.6.7
v0.6.6Compare Source
Previously, most layout setters ignored
null,undefined, or both, so the node kept its old style. As a result, a React or Solid component that removed a style prop kept the old layout. A plugin that readUnit.Undefinedfrom a getter also could not write that value back. In 0.6.6, a nullish write restores the default that the constructor uses when the option is omitted:Margin, padding, gap, min and max sizes, and
flexBasisbecome unset, so an edge falls back to its shorthand again.top,right,bottom, andleftalso unset the native edge. Before, the getter reportedundefinedwhile layout kept the old offset.widthandheightbecome"auto",positionbecomes"relative",overflowbecomes"visible", andvisiblebecomestrue. Invalid values are still ignored. Not every default comes back. Class defaults such as the row direction ofScrollBoxRenderablestay as they are, andflexShrinkbecomes1.If a custom renderable passes its own
widthorheighttosuper(), it should override the newprotected defaultDimension(kind)method. A nullish write then restores that size instead of"auto". Built-in classes that size themselves, such asInputRenderable,TabSelectRenderable, andASCIIFontRenderable, already override it.Added
protected defaultDimension(kind)to set thewidthorheightthat a nullish write restores. See Custom renderables. (#1678)Changed
nullorundefinedto a layout property restores the default for an omitted option, and removing a React or Solid style prop does the same. See Layout. (#1678)nullorundefinedtovisibleshows the node. Before,nullhid the node, so assignfalseto hide it. (#1678)Fixed
fillRect,drawBox,setCell,drawChar, and other calls with u32 fields now say "must be a non-negative integer" for NaN, Infinity, fractional, and negative values. Before, the error said that the value exceeded the u32 limit. See Buffer API. (#1674)titleorbottomTitleover 64 KiB throws the sameRangeErrorasdrawTextinstead of aNativeErrorwith theInvalidArgumentstatus. See Box. (#1674)NativeErrorwith the message "Scene nesting depth exceeds the native limit". Before, the message gave only theObjectLimitstatus. See Layout. (#1674)API changes and documentation: https://opentui.com/docs/releases/0.6.6
What's Changed
Full Changelog: anomalyco/opentui@v0.6.5...v0.6.6
v0.6.5Compare Source
OpenTUI 0.6 removed
Renderable.getLayoutNode(). Before 0.6, plugins used it to read the layout styles of host renderables that they did not create. Some plugins saved a container'sgetMaxWidth()andgetAlignSelf()so they could restore the container after they restyled it. Others checked the host layout withgetFlexDirection(), or sized a panel inside a padded sidebar withgetPadding(). 0.6 kept onlygetWidth()andgetMargin(edge), so this code had nothing to call.In 0.6.5, renderables have the other style getters of a Yoga
Node, with the same names and return types. To move, remove thegetLayoutNode()call:These getters return the declared style, not the computed layout. A write shows up at once, before the next layout pass. After
box.maxWidth = 40,box.getMaxWidth()returns{ unit: Unit.Point, value: 40 }, butbox.widthstill holds the computed width from the last pass. Afterdestroy(), the getters do not throw. They return Yoga's unset values, asgetWidth()does.An edge getter reads only the value set for that exact edge, so this case needs care. The
paddingoption setsEdge.All,paddingXsetsEdge.Horizontal, andpaddingLeftsetsEdge.Left. Afterpadding: 2,getPadding(Edge.Left)returns aUnit.Undefinedvalue, but layout still pads the left side by 2. That is because Yoga falls back fromEdge.LefttoEdge.Horizontaland then toEdge.All. To get the declared left padding, check the edges in that same order:Renderables still have no getter for computed padding, margin, or border. For padding declared in points, the declared value and the computed value are the same.
Added
Nodestyle getters, such asgetHeight(),getMaxWidth(),getPadding(edge),getGap(gutter),getFlexDirection(), andgetAlignSelf(). Use them instead of style reads throughgetLayoutNode(). See Layout. (#1667)API changes and documentation: https://opentui.com/docs/releases/0.6.5
What's Changed
Full Changelog: anomalyco/opentui@v0.6.4...v0.6.5
v0.6.4Compare Source
Fixed
API changes and documentation: https://opentui.com/docs/releases/0.6.4
What's Changed
Full Changelog: anomalyco/opentui@v0.6.3...v0.6.4
v0.6.3Compare Source
A coding agent such as opencode can wait for minutes at a permission prompt in a
background tab. Before this release, the terminal could not tell the user about it.
In 0.6.3, the agent can report its state to the terminal:
This call writes one report in the
Program Status Protocol,
OSC 7501. The terminal decides how to show the report. It can use a tab
indicator, an inbox entry, or a desktop notification. A terminal that does not
implement the protocol ignores the sequence, so
setProgramStatus()does notwait for capability detection.
capabilities.program_statusonly tells you thata reply arrived. A
falsevalue can also mean that the reply has not arrivedyet.
Each report replaces one record, and a field that a report omits is gone from
the record. Send
appandtitlewith every report that needs them. A programthat runs several tasks can give each task its own record with an
id. It canthen remove that record with
clear:Records belong to the terminal, not to the renderer. OpenTUI does not clear them
when the renderer is destroyed or suspended. When the process exits, the
terminal drops
workingandblockedrecords. It keepsdoneanderrorrecords for the user to find. If the user should see the result, report
doneorerrorbefore the program exits. OpenTUI also does not wrap reports in tmux orGNU Screen passthrough. The outer terminal cannot tell panes apart or see the
program exit, so a
workingrecord from a pane would never clear.C hosts send the same report with
ot_session_control()andOT_CONTROL_PROGRAM_STATUS. The payload is anot_session_program_statusstruct,followed by the id, app, title, and message bytes. Native code checks every
report on both paths before it writes anything. A report that a terminal would
discard or only partly read fails at the call.
Added
renderer.setProgramStatus(status)andNativeSession.setProgramStatus(status)send one OSC 7501 program statusreport. They return
falsewhen OpenTUI does not queue the report, and theythrow for an invalid report. See
Program status.
(#1657)
TerminalCapabilities.program_statusistruewhen the terminalreplies to the
OSC 7501 ; ?query. The renderer sends this query at startupwith the other capability queries, but not to foot. See
Terminal capabilities.
(#1657)
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.