Before / After
v0.8 Current
shipping
claude@evo:~/kpmg$ git status
On branch main
nothing to commit, working tree clean
36dp height · bg_edit bg · 44dp min-width · heavy
v0.8 Proposed (this pass)
redesign
claude@evo:~/kpmg$ git status
On branch main
nothing to commit, working tree clean
Row 1: 28dp · Row 2: 26dp · flat chip · 2px border · transparent bg
v0.9 Floating-Above-IME Variant
Keybar floats above soft keyboard (v0.9 — design-ahead)
v0.9 preview
claude@evo:~/kpmg$ git commit -m "|"
↑ cursor is in input — keyboard is raised
— soft keyboard (IME) —
q
w
e
r
t
y
u
i
o
p
space
↵
Implemented via WindowInsets.ime observer
Bar uses ViewCompat.setOnApplyWindowInsetsListener
Bar uses ViewCompat.setOnApplyWindowInsetsListener
v0.9 implementation note:
Use
ViewCompat.setOnApplyWindowInsetsListener on the bar container.
Translate the bar up by insets.ime.bottom px. The bar floats 0dp above the IME top edge.
Requires Android API 30+ (WindowInsetsAnimation) for a smooth follow animation.
In v0.8, the bar stays fixed at the bottom — keyboard obscures the terminal content below it.
The v0.9 float eliminates the obscure issue entirely.
CTRL / ALT Sticky Modifier States
Long-press CTRL or ALT → latches until next key
new behavior
CTRL
Default
unpressed
unpressed
→
CTRL
Tap-held
(momentary)
(momentary)
→
CTRL
Sticky
(long-press latch)
(long-press latch)
+
C
Next key
sends Ctrl+C
sends Ctrl+C
→
CTRL
Auto-releases
after 1 key
after 1 key
Sticky logic: Single tap = momentary (inject key while held). Long-press (400ms) = toggle sticky state. While sticky, CTRL background shows orange tint + orange border. Next character key tap injects the modified key combo and releases sticky. Long-press the latched CTRL again to manually un-latch.
Measurement Comparison
| Property | v0.8 Current | v0.8 Proposed | Change |
|---|---|---|---|
| Bar height (Row 1) | 36dp + 4dp padding = 40dp total | 22dp button + 3dp top + 3dp bottom = 28dp total | −12dp |
| Row 2 (optional) | — | 20dp button + 2dp + 2dp = 24dp total | +26dp context optional |
| Button bg | bg_edit (filled, heavy) | transparent + 1px border #3E3E42 | lighter |
| Button min-width | 44dp | 32dp (modifiers: 40dp touch target via padding) | denser |
| Font size | 13sp | 11sp (Row 1) · 10sp (Row 2) | −2sp |
| Button gap | 4dp | 2dp | denser |
| Border radius | 4dp | 2dp | terminal-native |
| CTRL/ALT sticky | not implemented | long-press 400ms → sticky latch → orange tint | new |
| Separator between groups | none | 1px × 14dp vertical rule, color #3E3E42 | new |
| Slide-in animation | instant show/hide | 220ms translateY 100%→0, cubic-bezier(0.35,0.91,0.33,0.97) | new |
Token Reference
Bar container bg
#2D2D2D (panel2)
Not #252526 — slightly lighter to separate from pane header
Button bg (default)
transparent
Border-only, no fill. Hover: rgba(255,255,255,0.05)
Button border
#3E3E42 (border)
1px solid, 2dp radius
Button text
#CCCCCC (text)
Monospace 11sp, font-family: system monospace → Geist Mono in v0.9
Sticky-active bg
rgba(193,95,60,0.13)
orange-tint token
Sticky-active border
#C15F3C (orange)
1px solid
Sticky-active text
#C15F3C (orange)
Same as border for coherence
Row 2 text
#858585 (muted)
Visually de-emphasized vs Row 1
Row 2 border
rgba(62,62,66,0.5)
Half-opacity border = subtle secondary row
Separator rule
#3E3E42
1px × 14dp, vertically centered in bar
Row 2 (Optional) — Verdict
Include Row 2. For terminal-heavy use (shell scripting, git operations, awk/sed), the second row saves consistent 3-tap sequences. The 26dp height is lightweight enough that it doesn't eat content. Make it user-toggleable via a long-press on the bar handle (the drag affordance at the bar's left edge) — off by default, remembered per-device. Row 2 characters:
PgUp PgDn : ; * & $ # ( ) ` !