- Multi-action system: each key supports multiple actions with different triggers (tap, long_press, double_tap, hold_start, hold_end) - GestureEngine: timing-based gesture detection with configurable thresholds - New config types: KeyAction, TimingConfig, DisplayOutput - Display output now supports JSON format (text/background/text_color) and first-line-as-hex-color format for dynamic key backgrounds - Display background colors are reflected in the web UI on the grid - renderUnicodeText/renderUnicodeTextOnImage accept custom text color (fg) - Global font setting (medium/regular) in Settings UI - PageManager.defaultFont used as fallback for per-key font - Alpine.js bundled locally (no CDN dependency) - Web UI: action tabs (Tap/Long Press/Double Tap/Hold), unified More section with appearance + display settings, gesture timing sliders in Settings - Grid: subtle action type icons in top-left corner matching display indicator style - Backward compatible: old config 'action' field auto-migrated to 'actions' array - M+ 1m font files in assets/ for reference - Updated config.example.json and README with all new features
74 lines
1.4 KiB
JSON
74 lines
1.4 KiB
JSON
{
|
|
"version": 1,
|
|
"log_level": "info",
|
|
"default_page": "main",
|
|
"font": "medium",
|
|
"devices": [
|
|
{
|
|
"serial": "",
|
|
"brightness": 75
|
|
}
|
|
],
|
|
"pages": [
|
|
{
|
|
"name": "main",
|
|
"keys": [
|
|
{
|
|
"index": 0,
|
|
"icon": "fa:terminal",
|
|
"actions": [
|
|
{
|
|
"trigger": "tap",
|
|
"type": "command",
|
|
"command": "kitty",
|
|
"background": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"index": 1,
|
|
"icon": "fab:firefox",
|
|
"label": "Browser",
|
|
"font_size": 11,
|
|
"actions": [
|
|
{
|
|
"trigger": "tap",
|
|
"type": "command",
|
|
"command": "firefox",
|
|
"background": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"index": 7,
|
|
"icon": "fa:chevron-right",
|
|
"label": "Next",
|
|
"actions": [
|
|
{
|
|
"trigger": "tap",
|
|
"type": "builtin",
|
|
"builtin": "page:next"
|
|
},
|
|
{
|
|
"trigger": "long_press",
|
|
"type": "builtin",
|
|
"builtin": "page:prev"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"auto_switch": [],
|
|
"screensaver": {
|
|
"enabled": false,
|
|
"idle_seconds": 30,
|
|
"image": "",
|
|
"brightness": 10
|
|
},
|
|
"timing": {
|
|
"long_press_ms": 500,
|
|
"double_tap_ms": 300
|
|
}
|
|
}
|