All sequences are ≤ 8 characters. Disambiguation notes applied where a shorter sequence is a prefix of a longer different-output entry (mu/mute, sub/subeq, sup/supeq).
Test plan
Compile firmware: qmk compile -kb keychron/q5_max/ansi_encoder -km via
Flash and verify a sample from each new group (e.g. gamma → γ, integ → ∫, elem → ∈, forall → ∀, real → ℝ)
Confirm disambiguation behaviour: type mu, wait >300 ms → μ; type mute → 🔇
Confirm aliases: eps → ε, prt → ∂, ang → ∠
## Summary
- Completes the Greek alphabet (gamma → psi, 21 new entries) with short aliases for longer names (`eps`, `ups`, `omi`)
- Adds blackboard-bold number-set symbols: `real` ℝ, `nat` ℕ, `intgr` ℤ, `rat` ℚ, `cmplx` ℂ, `aleph` ℵ
- Adds calculus symbols: `integ` ∫, `iint` ∬, `oint` ∮, `partial`/`prt` ∂, `nabla` ∇, `sum` ∑, `prod` ∏
- Adds set theory: `elem` ∈, `notin` ∉, `sub`/`subeq` ⊂⊆, `sup`/`supeq` ⊃⊇, `union` ∪, `inter` ∩, `empty` ∅
- Adds logic: `forall` ∀, `exists` ∃, `nexist` ∄, `land` ∧, `lor` ∨, `xor` ⊕, `impl` ⟹, `iff` ⟺
- Adds geometry: `angle`/`ang` ∠, `perp` ⊥, `parl` ∥
- Adds floor/ceiling brackets: `lfl` ⌊, `rfl` ⌋, `lcl` ⌈, `rcl` ⌉
- Adds `equiv` ≡ and `prop` ∝
All sequences are ≤ 8 characters. Disambiguation notes applied where a shorter sequence is a prefix of a longer different-output entry (`mu`/`mute`, `sub`/`subeq`, `sup`/`supeq`).
## Test plan
- [x] Compile firmware: `qmk compile -kb keychron/q5_max/ansi_encoder -km via`
- [x] Flash and verify a sample from each new group (e.g. `gamma` → γ, `integ` → ∫, `elem` → ∈, `forall` → ∀, `real` → ℝ)
- [x] Confirm disambiguation behaviour: type `mu`, wait >300 ms → μ; type `mute` → 🔇
- [x] Confirm aliases: `eps` → ε, `prt` → ∂, `ang` → ∠
Adds a new HID_CMD_BATTERY (0x44) command to the shared qmk-host protocol.
When the keyboard is in wireless transport mode (BT or 2.4G) the firmware
now pushes the current battery percentage to the host:
- Periodic push every 5 minutes via timer_read32()/timer_elapsed32(); fires
immediately on the first matrix_scan_user() call after boot so qmk-host
gets a reading as soon as the keyboard connects over USB in wireless mode.
- Redundant sends are suppressed: g_last_sent_bat tracks the last value
transmitted and the packet is skipped when the level has not changed.
- Query-response path: qmk-host can send CMD_BATTERY with HID_FLAG_QUERY at
any time; the keyboard replies with the current percentage or
HID_BATT_UNAVAILABLE (0xFF) when in USB transport mode.
- All battery and transport code is guarded by #ifdef LK_WIRELESS_ENABLE so
the keymap compiles cleanly on any wired-only build.
Firmware size delta: +160 bytes (well within flash budget).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
eps,ups,omi)realℝ,natℕ,intgrℤ,ratℚ,cmplxℂ,alephℵinteg∫,iint∬,oint∮,partial/prt∂,nabla∇,sum∑,prod∏elem∈,notin∉,sub/subeq⊂⊆,sup/supeq⊃⊇,union∪,inter∩,empty∅forall∀,exists∃,nexist∄,land∧,lor∨,xor⊕,impl⟹,iff⟺angle/ang∠,perp⊥,parl∥lfl⌊,rfl⌋,lcl⌈,rcl⌉equiv≡ andprop∝All sequences are ≤ 8 characters. Disambiguation notes applied where a shorter sequence is a prefix of a longer different-output entry (
mu/mute,sub/subeq,sup/supeq).Test plan
qmk compile -kb keychron/q5_max/ansi_encoder -km viagamma→ γ,integ→ ∫,elem→ ∈,forall→ ∀,real→ ℝ)mu, wait >300 ms → μ; typemute→ 🔇eps→ ε,prt→ ∂,ang→ ∠cace1c242dto4a1533b189