From 16b72dfd63744b338cd0fc53d7b83deab6faaf4a Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 23 Dec 2025 03:50:34 -0800 Subject: [PATCH] Mark powerline symbol range as reserved --- demo/client.ts | 4 ++-- demo/unicodeTable.ts | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/demo/client.ts b/demo/client.ts index c2a51268..12b0a6d0 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -29,7 +29,7 @@ import { WebglAddon } from '@xterm/addon-webgl'; import { Unicode11Addon } from '@xterm/addon-unicode11'; import { UnicodeGraphemesAddon } from '@xterm/addon-unicode-graphemes'; -import { writeUnicodeTable, type UnicodeRangeDefinition } from './unicodeTable'; +import { writeUnicodeTable } from './unicodeTable'; export interface IWindowWithTerminal extends Window { term: typeof Terminal; @@ -886,7 +886,7 @@ function customGlyphRangesHandler(): void { // Range: E0A0–E0BF // https://github.com/ryanoasis/nerd-fonts writeUnicodeTable(term, 'Powerline Symbols', 0xE0A0, 0xE0BF, [ - ['Powerline Symbols', 0xE0A0, 0xE0B3], + ['Powerline Symbols', 0xE0A0, 0xE0B3, [0xE0A4, 0xE0A5, 0xE0A6, 0xE0A7, 0xE0A8, 0xE0A9, 0xE0AA, 0xE0AB, 0xE0AC, 0xE0AD, 0xE0AE, 0xE0AF]], ['Powerline Extra Symbols', 0xE0B4, 0xE0BF], ]); // Symbols for Legacy Computing diff --git a/demo/unicodeTable.ts b/demo/unicodeTable.ts index 3e514f75..844edcfc 100644 --- a/demo/unicodeTable.ts +++ b/demo/unicodeTable.ts @@ -93,11 +93,15 @@ export function writeUnicodeTable(term: Terminal, name: string, start: number, e term.write(' '); if (codePoint >= start && codePoint <= end) { const charColorIndex = codePointColorMap.get(codePoint); + const isReserved = reservedSet.has(codePoint); + let char = String.fromCodePoint(codePoint); if (charColorIndex !== undefined) { - term.write(color(String.fromCodePoint(codePoint), charColorIndex)); - } else { - term.write(String.fromCodePoint(codePoint)); + char = color(char, charColorIndex); } + if (isReserved) { + char = faint(char); + } + term.write(char); } else { term.write(' '); } @@ -197,16 +201,39 @@ export function writeUnicodeTable(term: Terminal, name: string, start: number, e if (codePoint >= start && codePoint <= effectiveEnd) { // Color the character if it's part of a definition range const charColorIndex = codePointColorMap.get(codePoint); + const isReserved = reservedSet.has(codePoint); + let char = String.fromCodePoint(codePoint); if (charColorIndex !== undefined) { - term.write(color(String.fromCodePoint(codePoint), charColorIndex)); - } else { - term.write(String.fromCodePoint(codePoint)); + char = color(char, charColorIndex); } + if (isReserved) { + char = faint(char); + } + term.write(char); } else { term.write(' '); } } term.write('\n\r'); + + // Render reserved labels that appear after the first label (below the row) + // Only show one label pointing to the first reserved item when there are multiple + const lateReserved = rowLabels.length > 0 + ? rowReserved.filter(r => r.col >= rowLabels[0].col) + : rowReserved; + if (lateReserved.length > 0) { + const prefix = ' '.repeat(8); + const firstReserved = lateReserved[0]; + const colPos = firstReserved.col * 2 + 1; + const padding = ' '.repeat(colPos); + let line: string; + if (firstReserved.colorIndex >= 0) { + line = padding + color('└', firstReserved.colorIndex); + } else { + line = padding + '└'; + } + term.write(faint(prefix + line) + '\n\r'); + } } }