Skip to content

Move home-row mods to bottom row to unblock NAV arrow repeat#6

Closed
rdlu wants to merge 3 commits intomainfrom
feat/nav-arrow-repeat
Closed

Move home-row mods to bottom row to unblock NAV arrow repeat#6
rdlu wants to merge 3 commits intomainfrom
feat/nav-arrow-repeat

Conversation

@rdlu
Copy link
Copy Markdown
Owner

@rdlu rdlu commented Apr 11, 2026

Summary

  • Home-row mods relocated from the home row to the row below, vertically aligned:
    • Left: hml LCTRL C · hml LSHFT V · hml LALT B (was D / F / G)
    • Right: hmr LALT N · hmr RSHFT M · hmr RCTRL , (was H / J / K)
  • D / F / G and H / J / K on BASE are now plain &kp, so NAV layer arrows at positions 33–35 no longer sit over a hold-tap. OS auto-repeat works for LEFT / DOWN / UP.
  • CODE layer mod-tap wrappers moved to match: mt LCTRL LPAR · mt LSHFT RPAR · mt LALT EQUAL on C / V / B. LBKT / RBKT / PLUS on D / F / G become plain &kp.
  • hold-trigger-on-release is restored on hml / hmr — the root cause (positional overlap with NAV arrows) is now fixed structurally, so we don't need to loosen the hold-tap dispatch.
  • Tracking: NAV layer arrows don't auto-repeat when base position has a hold-tap #5

Why this shape

Dropping hold-trigger-on-release (the original canary approach) fixed auto-repeat but made the mods feel wrong during normal typing. This change solves the repeat problem at the layout level instead: once the arrow positions are no longer backed by a hold-tap, every hold-tap tuning knob stays at its original value.

Trade-off: bottom-row mods vs. home-row mods. The vertical-column mapping preserves which finger activates which modifier (middle-finger LCTRL, index-finger LSHFT, index-reach LALT), so muscle memory mostly transfers.

Test plan

  • Flash this build on both halves
  • NAV + LEFT / DOWN / UP / RIGHT all auto-repeat when held
  • Home-row-mod feel: LCTRL / LSHFT / LALT on C / V / B and RCTRL / RSHFT / LALT on N / M / , during real typing
  • CODE layer still produces [ ] + on D / F / G and ( ) = on C / V / B (with mods on hold)
  • AltGr combos on T / Y unchanged
  • No regressions on the soft-off combo (Q + S + Z per combo definition)

🤖 Generated with Claude Code

Hold-trigger-on-release made the home-row mods' dispatch interact with
momentary-layer overrides in a way that suppressed OS auto-repeat for
&kp LEFT/DOWN/UP on NAV (positions over hmr H/J/K). RIGHT (over plain L)
was unaffected, confirming the hold-tap was the culprit.

Tracking: #5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@rdlu
Copy link
Copy Markdown
Owner Author

rdlu commented Apr 11, 2026

What changed in this session

Request: make NAV layer + LEFT arrow auto-repeat when held. RIGHT already repeats.

Diagnosis: RIGHT is at position 36 over base &kp L (plain). LEFT/DOWN/UP are at positions 33/34/35 over base hmr LALT H / RSHFT J / RCTRL K (hold-taps). The underlying hold-tap state machine participates in event dispatch for these positions even when NAV overrides the binding with &kp, and hold-trigger-on-release defers the decision until another key releases — breaking the continuous-press signal OS auto-repeat needs.

Change: removed hold-trigger-on-release from both hml and hmr. Tapping-term / quick-tap / require-prior-idle are unchanged.

Rationale for not picking other options from #5: option 1 (relocate arrows) disrupts hjkl muscle memory; option 4 (leave it) doesn't fix anything. Option 3 is a one-line change that preserves layout and is easy to revert if home-row mod feel regresses.

Next: flashing this build and testing. If LEFT/DOWN/UP now repeat and mods still feel right, this ships. If mods feel sluggish or over-eager, fall back to option 1.

Option 3 (dropping hold-trigger-on-release) didn't feel right during
normal typing — falling back to option 1 from #5. Home-row mods now live
on the row below their original home-row positions:

  Left:  hml LCTRL C · hml LSHFT V · hml LALT B  (was D/F/G)
  Right: hmr LALT N · hmr RSHFT M · hmr RCTRL ,  (was H/J/K)

D/F/G and H/J/K are now plain &kp on base, so NAV layer arrow keys at
positions 33-35 no longer sit over a hold-tap — OS auto-repeat should
work for LEFT/DOWN/UP.

hold-trigger-on-release is restored on hml/hmr — we no longer need to
disable it since the root cause (positional overlap with NAV arrows) is
resolved structurally.

CODE layer: mod-tap wrappers moved to match. LBKT/RBKT/PLUS are now
plain kp on D/F/G; LPAR/RPAR/EQUAL on C/V/B carry the LCTRL/LSHFT/LALT
holds.

Tracking: #5
@rdlu rdlu changed the title Drop hold-trigger-on-release to unblock NAV arrow repeat Move home-row mods to bottom row to unblock NAV arrow repeat Apr 11, 2026
@rdlu
Copy link
Copy Markdown
Owner Author

rdlu commented Apr 11, 2026

Session update — follow-up fix

Canary (dropping hold-trigger-on-release) didn't feel right during normal typing, so we fell back to option 1 from #5: move the home-row mods off the positions that overlap with the NAV arrow cluster.

Change: home-row mods now live on the row below, vertically aligned with their old positions — hml LCTRL C / LSHFT V / LALT B and hmr LALT N / RSHFT M / RCTRL ,. hold-trigger-on-release is restored.

CODE layer: the mt wrappers were on D / F / G too, so they moved to C / V / B to match. Symbols shifted accordingly — LBKT / RBKT / PLUS are plain on D / F / G, and LPAR / RPAR / EQUAL carry the mod-taps on C / V / B.

Rationale for this shape vs. relocating arrows: moving three mod-tap wrappers one row down is less disruptive than moving the arrow cluster into a different visual layout on NAV. The arrow-on-home-row mental model is preserved, and all hold-tap timing stays untuned.

@rdlu
Copy link
Copy Markdown
Owner Author

rdlu commented Apr 11, 2026

Superseded by #10 (Idea 4 — home-row mods preserved, NAV arrows relocated). Closing per the design decision in #7.

@rdlu rdlu closed this Apr 11, 2026
rdlu added a commit that referenced this pull request Apr 11, 2026
Fixes NAV layer auto-repeat (#5) by moving the vim-style arrow cluster from row 2 (over home-row mods) to row 3 (over plain N/M/,/.). Also refines home-row-mod finger positions: LALT moves from G/H (index reach) to S/L (ring finger), RALT moves from T/Y to R/U (index home), both to fix mistyping. CODE layer mod-tap wrappers updated to match.

Supersedes #6, #8, #9. Explored in #7.
github-actions Bot pushed a commit that referenced this pull request Apr 11, 2026
Fixes NAV layer auto-repeat (#5) by moving the vim-style arrow cluster from row 2 (over home-row mods) to row 3 (over plain N/M/,/.). Also refines home-row-mod finger positions: LALT moves from G/H (index reach) to S/L (ring finger), RALT moves from T/Y to R/U (index home), both to fix mistyping. CODE layer mod-tap wrappers updated to match.

Supersedes #6, #8, #9. Explored in #7.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant