Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

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

feat: notepat help panel via meta/win key + meta keyname in input.c

Press the Windows/Meta (⊞) key to toggle a keyboard shortcut overlay
showing all notepat shortcuts. Press again to close.

Also added named keys for meta/control/alt/shift in input.c so JS
pieces can detect modifier keys directly.

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

+66
+62
fedac/native/pieces/notepat.mjs
··· 31 31 // Hold/latch: F11 (green pickup) engages, F10 (red hangup) clears 32 32 // While engaged, any new notes auto-latch (sustain on key release) 33 33 let recitalMode = false; // F12: hide all UI, show only colored backdrops 34 + let helpPanel = false; // Meta/Win key: show keyboard shortcut help overlay 34 35 let holdActive = false; // true when hold is engaged 35 36 let heldKeys = new Set(); // keys that are latched (won't stop on key-up) 36 37 ··· 640 641 type: "sine", 641 642 tone: recitalMode ? 880 : 440, 642 643 duration: 0.12, volume: 0.18, attack: 0.005, decay: 0.11 644 + }); 645 + return; 646 + } 647 + // Meta/Win key: toggle keyboard shortcut help panel 648 + if (key === "meta") { 649 + helpPanel = !helpPanel; 650 + sound?.synth?.({ 651 + type: "sine", 652 + tone: helpPanel ? 660 : 440, 653 + duration: 0.08, volume: 0.15, attack: 0.005, decay: 0.07 643 654 }); 644 655 return; 645 656 } ··· 2671 2682 } else { 2672 2683 system.hdmi(0, 0, 0); 2673 2684 } 2685 + } 2686 + 2687 + // Help panel overlay (Meta/Win key) — drawn last so it sits on top of everything 2688 + if (helpPanel) { 2689 + const dark = isDark(); 2690 + const padX = 8, padY = 8; 2691 + const lineH = 11; 2692 + const shortcuts = [ 2693 + ["a–l, ; '", "play notes (with sharps)"], 2694 + ["1–9 / ↑↓", "octave"], 2695 + ["space", "kick drum"], 2696 + ["tab", "cycle wave type"], 2697 + ["shift", "quick mode"], 2698 + ["F9", "metronome (now help panel)"], 2699 + ["F10 (📞)", "clear hold"], 2700 + ["F11 (📞)", "engage hold/latch"], 2701 + ["F12 (★)", "recital mode (hide UI)"], 2702 + ["meta (⊞)", "toggle this help"], 2703 + ["esc esc esc", "exit to prompt"], 2704 + ["[ / ]", "metronome BPM"], 2705 + ["- / =", "volume"], 2706 + ["home (sample)", "record sample"], 2707 + ["\\", "trackpad FX (X echo, Y pitch)"], 2708 + ]; 2709 + // Compute panel size 2710 + const titleH = 14; 2711 + const panelW = Math.min(w - 20, 280); 2712 + const panelH = titleH + lineH * shortcuts.length + padY * 2; 2713 + const px = Math.floor((w - panelW) / 2); 2714 + const py = Math.floor((h - panelH) / 2); 2715 + // Background with shadow 2716 + ink(0, 0, 0, 140); box(px + 3, py + 3, panelW, panelH, true); 2717 + ink(dark ? 22 : 240, dark ? 22 : 240, dark ? 28 : 245); box(px, py, panelW, panelH, true); 2718 + ink(dark ? 80 : 100, dark ? 80 : 100, dark ? 100 : 130); box(px, py, panelW, panelH, "outline"); 2719 + // Title 2720 + ink(dark ? 220 : 40, dark ? 220 : 40, dark ? 230 : 60); 2721 + write("notepat shortcuts", { x: px + padX, y: py + padY, size: 1, font: "font_1" }); 2722 + ink(dark ? 80 : 160, dark ? 80 : 160, dark ? 100 : 180); 2723 + line(px + padX, py + padY + 11, px + panelW - padX, py + padY + 11); 2724 + // Shortcuts list 2725 + let lineY = py + padY + titleH; 2726 + for (const [k, desc] of shortcuts) { 2727 + ink(dark ? 180 : 60, dark ? 200 : 80, dark ? 220 : 100); 2728 + write(k, { x: px + padX, y: lineY, size: 1, font: "font_1" }); 2729 + ink(dark ? 130 : 80, dark ? 130 : 80, dark ? 145 : 100); 2730 + write(desc, { x: px + padX + 90, y: lineY, size: 1, font: "font_1" }); 2731 + lineY += lineH; 2732 + } 2733 + // Hint at bottom 2734 + ink(dark ? 90 : 130, dark ? 90 : 130, dark ? 110 : 150); 2735 + write("press meta (⊞) again to close", { x: px + padX, y: py + panelH - padY - 5, size: 1, font: "font_1" }); 2674 2736 } 2675 2737 } 2676 2738
+4
fedac/native/src/input.c
··· 73 73 case KEY_F7: return "f7"; case KEY_F8: return "f8"; 74 74 case KEY_F9: return "f9"; case KEY_F10: return "f10"; 75 75 case KEY_F11: return "f11"; case KEY_F12: return "f12"; 76 + case KEY_LEFTMETA: return "meta"; case KEY_RIGHTMETA: return "meta"; 77 + case KEY_LEFTCTRL: return "control"; case KEY_RIGHTCTRL: return "control"; 78 + case KEY_LEFTALT: return "alt"; case KEY_RIGHTALT: return "alt"; 79 + case KEY_LEFTSHIFT: return "shift"; case KEY_RIGHTSHIFT: return "shift"; 76 80 case KEY_MUTE: return "audiomute"; 77 81 case KEY_VOLUMEDOWN: return "audiovolumedown"; 78 82 case KEY_VOLUMEUP: return "audiovolumeup";