For reference, here are the supported motions:
case '0': return { type: 'ZERO' };
case '_': return { type: 'START_ROW' };
// --- SEARCH ---
case '/': return { type: 'START_SEARCH' };
case 'n': return { type: 'NEXT_MATCH' };
case 'N': return { type: 'PREV_MATCH' };
// --- MOVEMENT (WASD Removed) ---
case 'h': case 'ArrowLeft': return { type: 'MOVE_CURSOR', dx: -1, dy: 0 };
case 'j': case 'ArrowDown': return { type: 'MOVE_CURSOR', dx: 0, dy: 1 };
case 'k': case 'ArrowUp': return { type: 'MOVE_CURSOR', dx: 0, dy: -1 };
case 'l': case 'ArrowRight': return { type: 'MOVE_CURSOR', dx: 1, dy: 0 };
// --- SKIPS ---
case 'w': return { type: 'NEXT_UNREVEALED' };
case 'b': return { type: 'PREV_UNREVEALED' };
// --- ACTIONS ---
case 'i': case 'Enter': return { type: 'REVEAL' };
case ' ': return { type: 'SMART' };
case 'f': return { type: 'FLAG' };
// --- ADVANCED MOTIONS ---
case '$': return { type: 'MOVE_CURSOR', dx: 999, dy: 0 };
case 'G': return { type: 'GO_BOTTOM' };
case 'g': return { type: 'GO_TOP' };
No macros or block select yet, still fun! probably for the best that /mine doesn't work yet