#29: Full keyboard support