Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

notepat: fix help panel glyphs (ASCII only) + clamp desc overflow

Help panel fixes:
- Replaced all Unicode glyphs with ASCII equivalents. font_1 (6x10.bdf)
is ASCII-only so arrows (← → ↑ ↓), stars (★), box (⊞), em-dashes (–),
and minus (−) were all rendering as question-mark tofu.
Now uses: < > ^ v (arrows), plain text for others.
- Truncate description text to fit the column. Previously long
descriptions like "trackpad (X echo, Y pitch)" bled past the panel's
right edge. We now clamp to floor(colGap - descOffset) / 6 chars
and append a "." to indicate truncation.
- Updated footer text to match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+28 -20
+28 -20
fedac/native/pieces/notepat.mjs
··· 4732 4732 // rendered in the same color at full saturation. 4733 4733 const categories = [ 4734 4734 ["NOTES", [120, 200, 255], [ 4735 - ["a–l ; '", "play notes"], 4736 - ["1–9", "octave"], 4737 - ["← →", "select L/R side"], 4738 - ["↑ ↓", "volume up/down"], 4735 + ["a-l ; '", "play notes"], 4736 + ["1-9", "octave"], 4737 + ["< >", "select L/R side"], 4738 + ["^ v", "volume up/down"], 4739 4739 [", .", "attack / decay"], 4740 4740 ["shift", "quick mode"], 4741 4741 ]], 4742 4742 ["DRUMS", [255, 140, 90], [ 4743 - ["pgup/pgdn", "kit L / R: off\u2192drums\u2192war"], 4744 - ["space", "reverse loop pedal"], 4743 + ["pgup/pgdn", "kit: off/drums/war"], 4744 + ["space", "reverse loop"], 4745 4745 ]], 4746 4746 ["WAVE", [220, 140, 255], [ 4747 - ["tab", "cycle wave type"], 4748 - ["F12 ★", "recital mode"], 4747 + ["tab", "cycle wave"], 4748 + ["F12", "recital mode"], 4749 4749 ]], 4750 4750 ["DECK", [120, 230, 150], [ 4751 4751 ["F1", "play / pause"], 4752 4752 ["F2", "next track"], 4753 4753 ["F3", "prev track"], 4754 4754 ["F4", "usb rescan"], 4755 - ["[ / `", "speed − / reset"], 4756 - ["drag", "scratch platter"], 4755 + ["[ / `", "speed - / reset"], 4756 + ["drag", "scratch"], 4757 4757 ]], 4758 4758 ["HOLD", [255, 220, 120], [ 4759 4759 ["enter", "add holds"], ··· 4761 4761 ]], 4762 4762 ["TEMPO", [255, 180, 100], [ 4763 4763 ["F9", "metronome"], 4764 - ["- / =", "bpm − / +"], 4764 + ["- / =", "bpm - / +"], 4765 4765 ]], 4766 4766 ["SAMPLE", [255, 150, 210], [ 4767 4767 ["home", "record global"], 4768 - ["end", "arm per-key/drum"], 4769 - ["delete", "clear sample bank"], 4768 + ["end", "arm per-key"], 4769 + ["delete", "clear samples"], 4770 4770 ]], 4771 4771 ["FX", [130, 230, 220], [ 4772 - ["\\", "trackpad (X echo, Y pitch)"], 4772 + ["\\", "trackpad fx"], 4773 4773 ]], 4774 4774 ["TAPE", [255, 120, 120], [ 4775 - ["prtsc/ins", "start/stop tape (MP4 + cloud)"], 4775 + ["prtsc/ins", "start/stop tape"], 4776 4776 ]], 4777 4777 ["SYSTEM", [190, 190, 205], [ 4778 - ["meta ⊞", "toggle this help"], 4779 - ["esc esc esc", "exit to prompt"], 4778 + ["meta", "toggle help"], 4779 + ["esc x3", "exit to prompt"], 4780 4780 ]], 4781 4781 ]; 4782 4782 ··· 4854 4854 ink(Math.floor(cr * 0.55), Math.floor(cg * 0.55), Math.floor(cb * 0.55)); 4855 4855 } 4856 4856 write(r.k, { x: rx + 6, y: ry, size: 1, font: "font_1" }); 4857 - // Description: muted gray that reads well on both themes 4857 + // Description: muted gray that reads well on both themes. 4858 + // Clamp to the remaining column width so long descriptions don't 4859 + // bleed past the panel edge. font_1 = 6px/char. 4858 4860 ink(dark ? 160 : 85, dark ? 165 : 85, dark ? 180 : 100); 4859 - write(r.desc, { x: rx + 6 + descOffset, y: ry, size: 1, font: "font_1" }); 4861 + const descW = Math.max(0, colGap - descOffset - 10); 4862 + const maxChars = Math.floor(descW / 6); 4863 + let descText = r.desc; 4864 + if (descText.length > maxChars && maxChars > 2) { 4865 + descText = descText.slice(0, maxChars - 1) + "."; 4866 + } 4867 + write(descText, { x: rx + 6 + descOffset, y: ry, size: 1, font: "font_1" }); 4860 4868 } 4861 4869 } 4862 4870 4863 4871 // Footer hint — always visible, always inside the panel 4864 4872 ink(dark ? 100 : 140, dark ? 100 : 140, dark ? 125 : 160); 4865 - write("meta ⊞ to close", { x: px + padX, y: py + panelH - padY - 2, size: 1, font: "font_1" }); 4873 + write("meta to close", { x: px + padX, y: py + panelH - padY - 2, size: 1, font: "font_1" }); 4866 4874 } 4867 4875 } 4868 4876