A UI input concept that enables 4 selections from a single icon pair using only left and right mouse buttons.
Stenocon displays two icons (L and R) side by side. By combining mouse button press sequences, users can select from 4 different options without moving the cursor:
| Action | Selection | Color |
|---|---|---|
| LMB click | L | Blue |
| RMB click | R | Red |
| LMB down → RMB down → RMB up | LR | Green |
| RMB down → LMB down → LMB up | RL | Yellow |
- 4 selections per icon - Quadruples information density
- No cursor movement required - Selection happens in place
- Drag & drop compatible - Hold button(s) and drag to target
- Undo by release order - Cancel by releasing first button before second
Live Demo - Interactive RPG inventory example
Documentation - Explanation with videos and pseudocode
git clone https://github.com/maribotto/stenocon.git
cd stenocon
# Open demo.html in your browser
# For index.html with embedded videos:
python -m http.server 8000
# Open http://localhost:8000/When you press a mouse button on a stenocon icon:
- Single button press → Shows the primary selection (L or R)
- While holding, press second button → Combo option appears highlighted (LR or RL)
- Release second button → Confirms the combo selection
- Release first button instead → Cancels (returns to neutral)
- Shift - Swaps L↔LR and R↔RL while held
- Tab - Toggles the swap persistently
- Number keys 1-4 - Select target slot directly
| File | Description |
|---|---|
demo.html |
Interactive browser demo |
index.html |
Documentation with videos and pseudocode |
diagram.svg |
Concept diagram |
PSEUDO.md |
Selection logic pseudocode |
- Game hotbars - 4x more abilities per slot
- Tool palettes - Compact toolbars with sub-tool access
- Emoji pickers - Related emoji variants
- File managers - Primary action + alternatives
- Any UI with limited space - Increase density without sacrificing usability
IF only LMB pressed and released → L
IF only RMB pressed and released → R
IF LMB first, then RMB, release RMB → LR
IF RMB first, then LMB, release LMB → RL
IF buttons released in wrong order → Cancel
See PSEUDO.md for detailed pseudocode.