Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
54f2d41
#902 WIP: Store image metadata
o-sdn-o Mar 29, 2026
e2ae7a2
#902 WIP: Add doc/svg-image-protocol.md
o-sdn-o Mar 30, 2026
6e093e6
#902 WIP: OSC image parser
o-sdn-o Mar 30, 2026
8727449
#902 WIP: Update svg-image-protocol.md
o-sdn-o Mar 31, 2026
e152de8
#902 WIP: Update svg-image-protocol.md
o-sdn-o Mar 31, 2026
803fe86
#902 WIP: Update svg-image-protocol.md
o-sdn-o Mar 31, 2026
fcfff94
#902 WIP: Update svg-image-protocol.md
o-sdn-o Mar 31, 2026
ed9b034
#902 WIP: Update svg-image-protocol.md
o-sdn-o Mar 31, 2026
3b154c2
#902 WIP: Update svg-image-protocol.md (object)
o-sdn-o Mar 31, 2026
3b325e0
#902 WIP: Update svg-image-protocol.md (rename to Universal Object Pr…
o-sdn-o Mar 31, 2026
505901b
#902 WIP: Update svg-image-protocol.md (rename to Embedded Object Pro…
o-sdn-o Mar 31, 2026
711b924
#902 WIP: Update svg-image-protocol.md (Embedded Object Protocol)
o-sdn-o Mar 31, 2026
f073423
#902 WIP: Update svg-image-protocol.md (rename to embedded-object-pro…
o-sdn-o Mar 31, 2026
3b5b582
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Mar 31, 2026
fcb0112
#902 WIP: Update embedded-object-protocol.md (non-destructive and cas…
o-sdn-o Mar 31, 2026
409591d
#902 WIP: Update embedded-object-protocol.md (cursor position)
o-sdn-o Mar 31, 2026
eff3271
#902 WIP: Update embedded-object-protocol.md (line wrapping)
o-sdn-o Mar 31, 2026
c45e6c0
#902 WIP: Update embedded-object-protocol.md (transform)
o-sdn-o Mar 31, 2026
639601e
#902 WIP: Update embedded-object-protocol.md (Bitwise Transformation …
o-sdn-o Mar 31, 2026
acdf1e2
#902 WIP: Update embedded-object-protocol.md (minor edits)
o-sdn-o Mar 31, 2026
a5cd775
#902 WIP: Update embedded-object-protocol.md (drop mirror in favor of…
o-sdn-o Mar 31, 2026
ba80a31
#902 WIP: Update embedded-object-protocol.md (add background attribute)
o-sdn-o Mar 31, 2026
69909b1
#902 WIP: Update embedded-object-protocol.md (minor edits)
o-sdn-o Mar 31, 2026
3f7368a
#902 WIP: Update embedded-object-protocol.md (reflow)
o-sdn-o Mar 31, 2026
c63ad90
#902 WIP: Update embedded-object-protocol.md (minor edits)
o-sdn-o Mar 31, 2026
ce28dff
#902 WIP: Update embedded-object-protocol.md (transparency)
o-sdn-o Mar 31, 2026
58b1fc5
#902 WIP: Update embedded-object-protocol.md (Gamma-Correct Blending)
o-sdn-o Mar 31, 2026
a49c6d0
#902 WIP: Update embedded-object-protocol.md (Layering)
o-sdn-o Mar 31, 2026
8e8fe19
#902 WIP: Revise OSC EOP parser
o-sdn-o Mar 31, 2026
dd08bc1
#902 WIP: Update embedded-object-protocol.md (drop background, add on…
o-sdn-o Apr 1, 2026
23aa826
#902 WIP: Drop the background attribute (add ontop)
o-sdn-o Apr 1, 2026
95d89e4
#902 WIP: Update embedded-object-protocol.md (BCE)
o-sdn-o Apr 1, 2026
c911fe7
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Apr 1, 2026
1bc470e
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Apr 1, 2026
7dd30e4
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Apr 1, 2026
56d0734
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Apr 1, 2026
dfd53ba
#902 WIP: Update embedded-object-protocol.md
o-sdn-o Apr 1, 2026
f83861a
#902 WIP: Revise cell body (increase cell size to 40 bytes)
o-sdn-o Apr 1, 2026
b9387ba
#902 WIP: Register received image (indexer)
o-sdn-o Apr 1, 2026
732e65b
#902 WIP: Print image shadow (test)
o-sdn-o Apr 1, 2026
4fd980c
#902 WIP: Print image shadow (normal/alt+fragments)
o-sdn-o Apr 1, 2026
afa4589
#902 WIP: Update embedded-object-protocol.md (make w/h float, introdu…
o-sdn-o Apr 2, 2026
67f0988
#902 WIP: Update embedded-object-protocol.md (audio)
o-sdn-o Apr 2, 2026
e4f24f3
#902 WIP: Switch to floating point arithmetic
o-sdn-o Apr 2, 2026
2dff204
#902 WIP: Make the scale attribute global
o-sdn-o Apr 2, 2026
20b8eb3
#902 WIP: Update embedded-object-protocol.md (clear object metadata i…
o-sdn-o Apr 2, 2026
96465d9
#902 WIP: Update embedded-object-protocol.md (empty id)
o-sdn-o Apr 2, 2026
944e2f8
#902 WIP: Don't use document's id if 'id' attribute is not specified
o-sdn-o Apr 2, 2026
f7eab7c
#902 WIP: Erase specified regions
o-sdn-o Apr 2, 2026
23703c9
#902 WIP: Fix temp buffer resize
o-sdn-o Apr 2, 2026
e95cb46
#902 WIP: Fix transform_state
o-sdn-o Apr 2, 2026
58b2bc3
#902 WIP: Implement cell::shaders::image (fix crop)
o-sdn-o Apr 2, 2026
6a968b1
#902 WIP: Make non-destructiveness configurable
o-sdn-o Apr 2, 2026
c03cbcc
#902 WIP: Update embedded-object-protocol.md (gc)
o-sdn-o Apr 2, 2026
b7f07ee
#902 WIP: Update embedded-object-protocol.md (gc)
o-sdn-o Apr 2, 2026
45df6d1
#902 WIP: Render image (test)
o-sdn-o Apr 3, 2026
a3b7441
#902 WIP: Move raster/sprite to geometry.hpp
o-sdn-o Apr 3, 2026
174e0f9
#902 WIP: Generalize sprite bitmap D4 transform
o-sdn-o Apr 3, 2026
c96ff5c
#902 WIP: Render image (rasterize document)
o-sdn-o Apr 3, 2026
c76350b
#902 WIP: Render image (fix offset)
o-sdn-o Apr 3, 2026
e9a75eb
#902 WIP: Fix whitespace trimming
o-sdn-o Apr 3, 2026
a1f2526
#902 WIP: Fix document parsing
o-sdn-o Apr 3, 2026
3b3552e
Update embedded-object-protocol.md
o-sdn-o Apr 4, 2026
7d184c6
Update embedded-object-protocol.md
o-sdn-o Apr 4, 2026
1b89d93
#902 WIP: Unify utf::get_pair for the case '... key=val<svg...>...</s…
o-sdn-o Apr 4, 2026
5b05f25
#902 WIP: Switch to AnyPlex (object->app)
o-sdn-o Apr 4, 2026
38ed018
#902 WIP: Make text output completely non-destructive for images
o-sdn-o Apr 4, 2026
fffe2ca
#902 WIP: Rename embedded-object-protocol.md to anyplex.md
o-sdn-o Apr 4, 2026
719a9b7
#902 WIP: Update anyplex.md (non-destructive text output)
o-sdn-o Apr 4, 2026
0d9ba51
#902 WIP: Update anyplex.md (non-destructive text output)
o-sdn-o Apr 4, 2026
bd80f93
#902 WIP: Implement image-over-text semantics (ontop)
o-sdn-o Apr 4, 2026
6b283c8
#902 WIP: Update anyplex.md (blinking)
o-sdn-o Apr 4, 2026
49224bd
#902 WIP: Implement dx/dy pixel-wise offsets
o-sdn-o Apr 4, 2026
525bfda
#902 WIP: Fix unix builds
o-sdn-o Apr 4, 2026
d06f24e
#902 WIP: Fix unix builds
o-sdn-o Apr 4, 2026
589fd47
#902 WIP: Fix transform (on first call)
o-sdn-o Apr 4, 2026
1f9fc2d
#902 WIP: Update anyplex.md (pixel-wise)
o-sdn-o Apr 5, 2026
401949d
#902 WIP: Update anyplex.md (backend/frontend separation)
o-sdn-o Apr 5, 2026
f68e56f
#902 WIP: Update anyplex.md
o-sdn-o Apr 5, 2026
fb5d58c
#902 WIP: Update anyplex.md
o-sdn-o Apr 5, 2026
9409ef7
#902 WIP: Update anyplex.md (trigger GA)
o-sdn-o Apr 5, 2026
cb02b29
#902 WIP: Update anyplex.md (BCE)
o-sdn-o Apr 5, 2026
b8edbea
#902 WIP: Fix scaling (+sub_id)
o-sdn-o Apr 6, 2026
792c552
#902 WIP: Fix unix builds (memset)
o-sdn-o Apr 6, 2026
0d01f09
#902 WIP: Fix unix builds (unused)
o-sdn-o Apr 6, 2026
1fce61e
#902 WIP: Fix alignment
o-sdn-o Apr 6, 2026
7dce6c7
#902 WIP: Fix unix builds (misleading-indentation)
o-sdn-o Apr 6, 2026
29bdb8d
#902 WIP: Fix unix builds (misleading-indentation)
o-sdn-o Apr 6, 2026
54149f1
#902 WIP: Minor edits
o-sdn-o Apr 6, 2026
5a9a7c5
#902 WIP: Unify intmath::xform_mirror
o-sdn-o Apr 6, 2026
38dd2da
#902 WIP: Make images/emoji semi-transparent on selection
o-sdn-o Apr 7, 2026
ec880e5
#902 WIP: Fix transformations (glyphs/images)
o-sdn-o Apr 9, 2026
58377ef
#902 WIP: Fix id parsing (+fix full transparent bitmaps)
o-sdn-o Apr 9, 2026
b666d12
v2026.04.09
o-sdn-o Apr 9, 2026
2f1ca23
#902 WIP: Remove debug logging
o-sdn-o Apr 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions doc/anyplex.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
### AnyPlex Protocol (APP)

The **AnyPlex Protocol** allows vector, bitmap, and extensible markup objects to be embedded directly into the terminal's scrollback buffer.

#### Backend & Frontend Separation

The protocol operates on a decoupled architecture to ensure high performance and display adaptability.

Scope | Role
--------------------------------|-----
**The Backend (BE)** | Acts as the "Source of Truth". It manages the terminal state, handles the scrollback buffer, and maintains the global object cache. It tracks metadata per cell but remains agnostic of physical pixels.
**The Graphical Frontend (FE)** | Acts as the "Painter". It performs the actual rasterization of documents (e.g., SVG to pixels) based on local cell metrics. It handles alpha-blending, Z-order layering, and pixel-wise offsets.

#### Rendering & Interaction

- **Rectangular Area**: The object is hosted within a grid of cells defined by `ceil(width)` and `ceil(height)`.
- **Pixel-wise Precision**: The raster is scaled using floating-point `width` and `height` and positioned with `dx` and `dy` offsets. Offsets are calculated **per-frontend** based on its current cell metrics.
- **Asynchronous Rasterization**: It is recommended to perform rasterization in a parallel thread. Until the raster is ready, the frontend should display the cells without the graphic.
- **Persistence**: Metadata is stored per-cell to survive scrollback and ensure that wrapped cell-runs remain logically linked for a strict rectangular reflow.
- **Cursor Position**: Anchored at the top-left; moves to the cell immediately following the rectangle's bottom-right corner after output.
- **Destructivity**:
- If the **`gc`** attribute is not empty, the provided grapheme cluster is written to **every cell** in the area (`ceil(width)` by `ceil(height)`), replacing existing text and SGR attributes.
- If **`gc`** is empty, the output is non-destructive; existing text and SGR attributes remain visually intact under the transparent object.
- Any text subsequently written over the object's area does not destroy the underlying object. The object metadata remains intact in the cell until explicitly cleared or replaced.
- **Selection & SGR 7**: When selecting text/graphics with the mouse, or when the **SGR 7** attribute is present in a cell, the frontend **halves the alpha channel** of the object's pixels within that cell.
- **Searchability**: Any text contained within the document (e.g., `<text>` in SVG) is treated as part of the graphic and is not required to be indexed by the terminal's text search.
- **Layering & Transparency**: Supports per-pixel alpha transparency. The `ontop` attribute determines Z-order relative to text (0 = background `[Cell BG] -> [Object] -> [Text]`, 1 = foreground `[Cell BG] -> [Text] -> [Object]`; the cell's background color always remains in the background). The terminal cursor is always drawn on top of everything. Alpha blending is performed in **linear color space**.
- **Foreground Color**: The underlying cell **SGR foreground color** maps to `currentColor` (for SVG). All other external references (e.g., `http://...`) are ignored for security.

#### Scroll & Reflow Behavior

- **Normal Buffer**: If the cell-run containing the object does not fit within the viewport width, it triggers a standard wrap with a scroll-up if necessary (without triggering **BCE - Background Color Erase**). This may break the rectangular visual of the raster until the viewport is widened or a non-wrap mode is enabled.
- **Alternate Buffer**: The object's rectangle is strictly clipped (cropped) by the right and bottom edges of the viewport; no scrolling occurs.

#### Sequence Format

```
ESC ] app ; [<attributes>] [<document>] ST
```

Field | Description
------------------|------------
**OSC command** | Mandatory. `app`.
**attributes** | Optional. Space-separated `key=value` pairs. Values can be quoted (`"` or `'`) or unquoted. All keys and values are **case-sensitive**.
**document** | Optional. UTF-8 data starting with `<` (the first character of the openning tag, e.g. `<svg>`) and ending with `>` (the last character of the closing tag, e.g. `</svg>`). The specified document is considered to be an `empty-doc` if it has the form `<tag></tag>`, where `tag` is any string.

#### Attributes

Attribute | Values | Default | Description
--------------|----------------------------------------|--------------------------|------------
**id** | `<id>[/sub-id]` | empty string (`""`) | Object reference ID.
**gc** | `string` | empty string (`""`) | Grapheme cluster to write to cells (will be scaled to a 1x1 cell size).
**ontop** | `0`\|`1` | `0` | 0 = under text, 1 = over text.
**width** | `float (0..65535]` | Terminal viewport width | Raster scale width (cells).
**height** | `float (0..65535]` | Terminal viewport height | Raster scale height (cells).
**dx** | `float` | `0.0` | Horizontal offset of the raster within the grid (cells).
**dy** | `float` | `0.0` | Vertical offset of the raster within the grid (cells).
**column** | `0`..`ceil(width)` | `0` | Horizontal 1-based slicing index for partial rendering (0 = full width, 1..n = specific cell/slice).
**row** | `0`..`ceil(height)` | `0` | Vertical 1-based slicing index for partial rendering (0 = full height, 1..m = specific cell/slice).
**align** | \[`left`\|`center`\|`right`\]\[`-`\]\[`top`\|`middle`\|`bottom`\] | `center-middle` | 2D alignment within the rectangle.
**scale** | `inside`\|`outside`\|`stretch`\|`none` | `inside` | Fit logic (none = exact pixels, cropped if larger).
**transform** | `0`..`7` | `0` | 3-bit compact transformation state `[FlipY][FlipX][SwapXY]`.
**flip** | `none`\|`v`\|`h`\|`vh`\|`hv` | `none` | Applied in order of appearance in the string.
**rotate** | `0`\|`90`\|`180`\|`270` | `0` | CCW rotation applied in order of appearance.

> Notes:
> - If `id` is omitted , the empty string `id=""` is used for registration and output.
> - Attribute values `width` and `height` are clamped to the `(0..65535]` range and further limited by the terminal's maximum window size settings.
> - Attribute values `width`, `height`, `dx` and `dy` are multiplied by the cell size and **rounded** to get the exact pixel values on the FE side.
> - The first part of the object reference ID (`id`) references the raw object document in the Backend cache.
> - The second part of the object reference ID (`sub-id`) addresses the specific named element (e.g., an `id="..."` within an SVG document). The Frontend renders only this fragment if it is specified.

#### Lifecycle & Cache Management

Input State | Action
------------------------|-------
**id** + **doc** | Store/update the object document in cache and output.
**id** + **empty-doc** | Unregister `id` and free the index.
**id** + **no-doc** | Output cached object.
**id/sub-id** | If a `sub-id` is specified, the FE renders that specific element in its original coordinates (as it would appear in the full document), inheriting all parent styles (CSS, `<g>` groups).
**Errors** | If a document is invalid, the `id` is unknown, the `sub-id` is missing, or the cache is full, the FE **clears the object metadata** in the target area (rendering nothing) and logs the error.

> Note:
> When the BE deletes an `id`, or upon `reset`/session close, it frees the index and signals the FEs.
> - FEs then traverse their viewport cells; any image in the FE cache no longer referenced by any cell is purged.
> - If an FE encounters an unknown object index in a cell, it must request full metadata/document from the BE.

#### Parsing Rules (Backend)

1. Scan the OSC string for `key=value` pairs.
2. Identify document boundaries via first `<` and last `>`.
3. Apply transformation pipeline (`transform`, `flip`, `rotate`) in the order they appear.

#### Extensibility

The protocol is engine-agnostic. Focused on **SVG**, but designed to support other formats (e.g., `<html>`, `<object>`) via root tag identification.

The protocol can be extended to include non-visual data segments such as `<audio>` or `<wav>`, allowing for synchronized multimedia playback managed by the Frontend.
2 changes: 1 addition & 1 deletion doc/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ Note: You can explicitly specify running vtm inside the terminal (run `vtm --tui

- In general, the local and remote platforms may be different.
- When the DirectVT mode is used, all keyboard, mouse, and other input events are transmitted between hosts in a binary form.
- The following examples assume that vtm is accessible via PATH on both the local and remote sides.
- The following examples assume that vtm is accessible via PATH on both the local and remote sides.

### Run remote desktop/terminal over SSH

Expand Down
12 changes: 1 addition & 11 deletions doc/character_geometry.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,17 +159,7 @@ VS12 | 0xFE0B | Rotate 270° CCW
VS13 | 0xFE0C | Horizontal flip
VS14 | 0xFE0D | Vertical flip

Example functions for applying a rotation operation to the current three-bit integer state:
```c++
void VS10(int& state) { state = (state & 0b100) | ((state + 0b001) & 0b011); }
void VS11(int& state) { state = (state & 0b100) | ((state + 0b010) & 0b011); }
void VS12(int& state) { state = (state & 0b100) | ((state + 0b011) & 0b011); }
void VS13(int& state) { state = (state ^ 0b100) | ((state + (state & 1 ? 0 : 0b010)) & 0b011); }
void VS14(int& state) { state = (state ^ 0b100) | ((state + (state & 1 ? 0b010 : 0)) & 0b011); }

int get_angle(int state) { int angle = 90 * (state & 0b011); return angle; }
int get_hflip(int state) { int hflip = state >> 2; return hflip; }
```
Note: Due to non-commutativity, transformations are performed in the order they appear.

# New Look for Text-based User Interface

Expand Down
12 changes: 6 additions & 6 deletions doc/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -1003,12 +1003,12 @@ Notes
<default fgc=whitedk bgc=pureblack/> <!-- Default terminal colors (SGR 39/49, set by OSC 10/11). -->
<match fx="color" fgc=whitelt bgc= #007F00/> <!-- Appearance of selected text matches. Available shaders (fx): "xlight", "color", "invert", "reverse". -->
<selection>
<text fx="color" fgc=whitelt bgc=bluelt/> <!-- Selection highlighting for plaintext clipboard mode. -->
<protected fx="color" fgc=whitelt bgc=bluelt/> <!-- Note: bgc and fgc attributes only apply when fx="color". -->
<ansi fx="xlight" fgc=whitelt bgc=bluelt/>
<rich fx="xlight" fgc=whitelt bgc=bluelt/>
<html fx="xlight" fgc=whitelt bgc=bluelt/>
<none fx="color" fgc=whitedk bgc=blacklt/> <!-- Appearance of an inactive selection. -->
<text fx="color" inv=true bgc=whitelt fgc=bluelt/> <!-- Selection highlighting for plaintext clipboard mode. -->
<protected fx="color" inv=true bgc=whitelt fgc=bluelt/> <!-- Notes: -->
<ansi fx="color" inv=true bgc=whitelt fgc=bluelt/> <!-- - inv=true ensures that the embedded image becomes translucent (see AnyPlex Protocol). -->
<rich fx="color" inv=true bgc=whitelt fgc=bluelt/> <!-- - bgc and fgc attributes only apply when fx="color". -->
<html fx="color" inv=true bgc=whitelt fgc=bluelt/>
<none fx="color" inv=true bgc=whitedk fgc=blacklt/> <!-- Appearance of an inactive selection. -->
</selection>
<names=/X11ColorNames> <!-- Color name mappings for OSC 4, 10-12. -->
<!-- <name="New Dark Orange" rgb= #FF8C00 /> -->
Expand Down
16 changes: 8 additions & 8 deletions src/netxs/apps/tile.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -794,14 +794,14 @@ namespace netxs::app::tile
auto parse_data = [](auto&& parse_data, view& utf8, auto min_ratio, auto grip_bindings_ptr) -> netxs::sptr<ui::veer>
{
auto slot_ptr = node_veer(node_veer, min_ratio, grip_bindings_ptr);
utf::trim_front(utf8, ", ");
utf::trim_front(utf8, netxs::whitespaces_and<','>);
if (utf8.empty()) return slot_ptr;
auto tag = utf8.front();
if ((tag == 'h' || tag == 'v') && utf8.find('(') < utf8.find(','))
{
// add split
utf8.remove_prefix(1);
utf::trim_front(utf8, ' ');
utf::trim_front(utf8, netxs::whitespaces);
auto s1 = si32{ 1 };
auto s2 = si32{ 1 };
auto w = si32{-1 };
Expand All @@ -813,14 +813,14 @@ namespace netxs::app::tile
if (auto r = utf::to_int(utf8)) // Right side ratio
{
s2 = std::abs(r.value());
utf::trim_front(utf8, ' ');
utf::trim_front(utf8, netxs::whitespaces);
if (!utf8.empty() && utf8.front() == ':') // Grip width.
{
utf8.remove_prefix(1);
if (auto g = utf::to_int(utf8))
{
w = std::abs(g.value());
utf::trim_front(utf8, ' ');
utf::trim_front(utf8, netxs::whitespaces);
}
}
}
Expand All @@ -832,15 +832,15 @@ namespace netxs::app::tile
auto slot1 = node->attach(slot::_1, parse_data(parse_data, utf8, ui::fork::min_ratio, grip_bindings_ptr));
auto slot2 = node->attach(slot::_2, parse_data(parse_data, utf8, ui::fork::max_ratio, grip_bindings_ptr));
slot_ptr->attach(node);
utf::trim_front(utf8, ") ");
utf::trim_front(utf8, netxs::whitespaces_and<')'>);
}
else // Add application.
{
utf::trim_front(utf8, ' ');
auto menuid = utf::take_front(utf8, " ,)").str();
utf::trim_front(utf8, netxs::whitespaces);
auto menuid = utf::take_front(utf8, netxs::whitespaces_and<',', ')'>).str();
if (menuid.empty()) return slot_ptr;

utf::trim_front(utf8, " ,");
utf::trim_front(utf8, netxs::whitespaces_and<','>);
if (utf8.size() && utf8.front() == ')') utf8.remove_prefix(1); // pop ')';

auto& s = *slot_ptr;
Expand Down
40 changes: 21 additions & 19 deletions src/netxs/desktopio/ansivt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,25 +137,27 @@ namespace netxs::ansi
static const auto c0_us = '\x1F'; // Unit Separator.
static const auto c0_del = '\x7F'; // Delete cell backward.

static const auto osc_label_title = "0" ; // Set icon label and title.
static const auto osc_label = "1" ; // Set icon label.
static const auto osc_title = "2" ; // Set title.
static const auto osc_xprop = "3" ; // Set xprop.
static const auto osc_set_palette = "4" ; // Set 256 colors palette.
static const auto osc_linux_color = "P" ; // Set 16 colors palette. (Linux console)
static const auto osc_linux_reset = "R" ; // Reset 16/256 colors palette. (Linux console)
static const auto osc_clipboard = "52" ; // Set clipboard.
static const auto osc_term_notify = "9" ; // Terminal notifications.
static const auto osc_set_fgcolor = "10" ; // Set fg color.
static const auto osc_set_bgcolor = "11" ; // Set bg color.
static const auto osc_caret_color = "12" ; // Set cursor color.
static const auto osc_reset_color = "104" ; // Reset color N to default palette. Without params all palette reset.
static const auto osc_reset_fgclr = "110" ; // Reset fg color to default.
static const auto osc_reset_bgclr = "111" ; // Reset bg color to default.
static const auto osc_reset_crclr = "112" ; // Reset cursor color to default.
static const auto osc_semantic_fx = "133" ; // Semantic markers (shell integration).
static const auto osc_title_report = "l" ; // Get terminal window title.
static const auto osc_label_report = "L" ; // Get terminal window icon label.
static const auto osc_label_title = "0" ; // Set icon label and title.
static const auto osc_label = "1" ; // Set icon label.
static const auto osc_title = "2" ; // Set title.
static const auto osc_xprop = "3" ; // Set xprop.
static const auto osc_set_palette = "4" ; // Set 256 colors palette.
static const auto osc_linux_color = "P" ; // Set 16 colors palette. (Linux console)
static const auto osc_linux_reset = "R" ; // Reset 16/256 colors palette. (Linux console)
static const auto osc_clipboard = "52" ; // Set clipboard.
static const auto osc_term_notify = "9" ; // Terminal notifications.
static const auto osc_set_fgcolor = "10" ; // Set fg color.
static const auto osc_set_bgcolor = "11" ; // Set bg color.
static const auto osc_caret_color = "12" ; // Set cursor color.
static const auto osc_reset_color = "104" ; // Reset color N to default palette. Without params all palette reset.
static const auto osc_reset_fgclr = "110" ; // Reset fg color to default.
static const auto osc_reset_bgclr = "111" ; // Reset bg color to default.
static const auto osc_reset_crclr = "112" ; // Reset cursor color to default.
static const auto osc_semantic_fx = "133" ; // Semantic markers (shell integration).
static const auto osc_title_report = "l" ; // Get terminal window title.
static const auto osc_label_report = "L" ; // Get terminal window icon label.
static const auto osc_glyph = "glyph" ; // Dynamic Glyph Redefinition.
static const auto osc_app = "app" ; // AnyPlex Protocol.

static const auto sgr_rst = 0;
static const auto sgr_sav = 10;
Expand Down
2 changes: 1 addition & 1 deletion src/netxs/desktopio/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ namespace netxs::app

namespace netxs::app::shared
{
static const auto version = "v2026.03.27";
static const auto version = "v2026.04.09";
static const auto repository = "https://github.com/directvt/vtm";
static const auto usr_config = "~/.config/vtm/settings.xml"s;
static const auto sys_config = "/etc/vtm/settings.xml"s;
Expand Down
Loading
Loading