qmk_userspace/docs/keyboard-optimization-plan.md
Pablo Ontiveros 9d969f7eed add tap dance
2025-08-29 10:21:44 -06:00

373 lines
No EOL
11 KiB
Markdown

# Plan de Optimización del Keymap - Corne (Crkbd)
*Análisis y recomendaciones basadas en estudios ergonómicos de 2025*
## 📊 Resumen Ejecutivo
Este documento presenta un plan estructurado para optimizar el keymap del teclado Corne basado en:
- Análisis del keymap actual
- Investigación de layouts ergonómicos de 2025
- Estudios de frecuencia de bigrams en programación
- Mejores prácticas de home row mods en QMK
## ✅ Fase 1 - COMPLETADA (Enero 2025)
### Cambios Implementados
- **Optimización de timing**: TAPPING_TERM 220ms → 200ms
- **Configuración avanzada**: PERMISSIVE_HOLD, BILATERAL_COMBINATIONS
- **Combos útiles**: 5 nuevos combos para operaciones frecuentes
- **Limpieza de capas**: Eliminación de copy/paste duplicado
- **Corrección técnica**: HM_L de LALT_T a RALT_T
### Beneficios Obtenidos
- **0 días de adaptación** - Solo mejoras aditivas
- **Mejor respuesta** de home row mods
- **Reducción de fatiga** en pulgares con combos alternativos
- **Mayor consistencia** en modifier layout
### Combos Añadidos
```
J+K = ESC adicional (50-100 usos/día)
D+F = TAB adicional (200+ usos/día)
K+L = Delete word derecha (Nuevo - 100+ usos/día)
S+D = Delete word izquierda (Nuevo - 100+ usos/día)
,+. = ENTER adicional (300+ usos/día)
```
---
## 🟢 Fase 2 - Impacto Medio (1-2 semanas adaptación)
### 2.1 Per-Key Tapping Terms
**Objetivo**: Optimizar timing según fuerza de cada dedo
**Implementación**:
```c
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case HM_F: case HM_J: return 180; // Índices más rápidos
case HM_A: case HM_SCLN: return 250; // Meñiques más lentos
default: return TAPPING_TERM;
}
}
```
**Beneficios**:
- Menos activaciones accidentales en dedos débiles
- Respuesta más rápida en dedos fuertes
- Typing más natural y menos errores
### 2.2 Implementación de Tap Dance para Símbolos
**Objetivo**: Consolidar 16+ símbolos frecuentes en 8 tap dances para máxima eficiencia
**Análisis de frecuencia personal**:
- `.` (1,054,817) - `,` (443,890) - `/` (543,499) - `-` (383,003)
- `()` (735,492 total) - `=` (342,151) - `{}` (462,028 total) - `<>` (267,609 total)
**SYMBOL_NEW layer (implementación con tap dance)**:
```
Mano derecha optimizada:
┌─────┬─────┬─────┬─────┬─────┬─────┐
│ ` │TD_AM│ * │TD_SL│ ^ │ │ Row superior
├─────┼─────┼─────┼─────┼─────┼─────┤
│TD_EQ│TD_J │TD_K │TD_SC│TD_L │ │ Home row (5 TDs)
├─────┼─────┼─────┼─────┼─────┼─────┤
│ ~ │TD_MN│ : │TD_EX│ % │ │ Row inferior
└─────┴─────┴─────┴─────┴─────┴─────┘
Thumbs: @ # $
8 Tap Dances:
- TD_J: { | {} | }
- TD_K: ( | () | ("") | () => {} | )
- TD_SC: < | <> | <= | >
- TD_L: [ | [] | [0] | ]
- TD_EQ: = | == | += | +
- TD_SL: / | // | \
- TD_MN: - | -- | => | _
- TD_AM: & | && | || | |
- TD_EX: ! | != | ?
```
**Estrategia de implementación**:
- **L_TAB → SYMBOL_NEW** (nueva capa optimizada)
- **L_ESC → SYMBOL** (mantener como backup temporal)
- Período de evaluación: 2-3 semanas
- Una vez validado → eliminar SYMBOL antigua
**Impacto**:
- 16 símbolos consolidados en 8 teclas
- Reducción 50% en cambios de layer
- Patrones de código comunes en 2-4 taps
### 2.3 Optimización de Navegación
**Problemas identificados**:
- Page Up/Down requieren stretching
- Word navigation poco intuitiva
- Arrows en posiciones subóptimas para programadores
**Mejoras**:
- Word movement en home row
- Page navigation más accesible
- Consistency con vim shortcuts (preparación Fase 4)
---
## 🟡 Fase 3 - Impacto Alto (2-3 semanas adaptación)
### 3.1 Transición Gradual y Eliminación de Capas
**Problema resuelto**: SYMBOL y SYMBOL2 fragmentaban símbolos relacionados
**Implementación por fases**:
**Fase A - Transición (2-3 semanas)**:
- L_TAB → SYMBOL_NEW (tap dances optimizados)
- L_ESC → SYMBOL (backup de seguridad)
- Entrenamiento gradual en tap dances
- Fallback a SYMBOL cuando sea necesario
**Fase B - Consolidación (evaluación)**:
- Medir eficiencia y comfort con SYMBOL_NEW
- Identificar patrones problemáticos
- Ajustar timings y configuraciones si necesario
**Fase C - Finalización**:
- Eliminar SYMBOL y SYMBOL2 completamente
- Liberar L_ESC para otros usos (UTIL, macros, etc.)
- Una sola capa de símbolos ultra-optimizada
**Beneficios finales**:
- 2 capas eliminadas (SYMBOL + SYMBOL2)
- 1 tecla de thumb liberada (L_ESC)
- Símbolos más eficientes por tap dance
- Patrones de programación integrados
### 3.2 Reasignación de Layer-Tap Problemático
**Problema**: Z es muy frecuente para ser layer-tap (undo, palabras con Z)
**Opciones evaluadas**:
1. **NAV en X** (Recomendado): Cut menos frecuente que undo
2. **NAV en V**: Paste relocatable a combo
3. **NAV en Q**: Letra menos usada, pero alcance de meñique
**Implementación**:
- Reasignar L_Z → L_X
- Combo Z+C = Cut (C(KC_X))
- Mantener NAV en mano izquierda
### 3.3 Optimización de Thumb Keys
**Análisis de frecuencia actual**:
```
L_ESC - SYMBOL2 (medio uso)
L_TAB - SYMBOL (alto uso)
L_SPC - NUMBER (muy alto uso)
L_ENT - DEV (alto uso)
L_BK - FUNC (medio uso)
L_DEL - MEDIA (bajo uso)
```
**Optimización propuesta**: Mover MEDIA a combo, usar thumb para función más frecuente
---
## 🔴 Fase 4 - Impacto Extremo (1-2 meses adaptación)
### 4.1 Navegación Estilo Vim
**Transformación completa**:
```
Actual: ↑←↓→ en disposición estándar
Propuesto: HJKL (H=←, J=↓, K=↑, L=→)
```
**Justificación**:
- Standard en vim/nvim, terminal apps
- Home row permanente durante navegación
- Integración natural con shortcuts de desarrollo
**Consideración**: Solo para usuarios avanzados de vim
### 4.2 Combos Avanzados de Programación
**Macros inteligentes**:
```
Combos propuestos:
- Function declaration patterns
- Arrow function sequences
- Bracket auto-completion
- Common programming constructs
```
### 4.3 Capas Contextuales
**Sistema adaptativo**:
- Capas que cambian según aplicación activa
- Profiles para diferentes workflows
- Integration con herramientas de desarrollo
---
## 🔧 Configuración Técnica de Tap Dance
### Configuración QMK necesaria:
```c
// En config.h
#define TAP_DANCE_ENABLE
#define TAPPING_TERM 200
#define TAPPING_TERM_PER_KEY
// Enum para tap dances
enum tap_dances {
TD_J_BRACES, // Llaves
TD_K_PARENS, // Paréntesis
TD_SC_ANGLES, // Ángulos
TD_L_BRACKETS, // Corchetes
TD_EQ_PLUS, // Equal/Plus
TD_SL_BACK, // Slash/Backslash
TD_MN_UNDER, // Minus/Underscore
TD_AM_PIPE, // Ampersand/Pipe
TD_EX_QUEST, // Exclamation/Question
};
// Funciones personalizadas para cada tap dance
void td_k_finished(qk_tap_dance_state_t *state, void *user_data) {
switch (state->count) {
case 1:
if (state->pressed) {
register_code16(KC_RPRN); // Hold = )
} else {
register_code16(KC_LPRN); // 1 tap = (
}
break;
case 2:
SEND_STRING("()");
tap_code(KC_LEFT); // 2 taps = ()←
break;
case 3:
SEND_STRING("(\"\"");
tap_code(KC_LEFT);
tap_code(KC_LEFT); // 3 taps = ("")←←
break;
case 4:
SEND_STRING("() => {}");
tap_code(KC_LEFT);
tap_code(KC_LEFT);
tap_code(KC_LEFT); // 4 taps = () => {}←←←
break;
}
}
```
### Timing optimizado por dedo:
```c
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case TD_J_BRACES:
case TD_K_PARENS: return 180; // Índice/medio más rápidos
case TD_L_BRACKETS: return 220; // Meñique más lento
case TD_SC_ANGLES: return 200; // Anular estándar
default: return TAPPING_TERM;
}
}
```
## 🔧 Fase 5 - Optimizaciones Futuras
### 5.1 Análisis Post-Implementación
**Métricas a evaluar** (post tap dance):
- Velocidad de typing en símbolos frecuentes
- Tasa de error en tap dances vs teclas simples
- Fatiga subjetiva después de sesiones largas
- Patrones de uso real de cada tap dance
### 5.2 Expansiones Avanzadas
**Si tap dance funciona bien**:
- Combos adicionales para símbolos menos frecuentes
- Macros contextuales por aplicación
- Auto-shift para pares de símbolos
- Integration con snippets de código
---
## 📈 Métricas de Éxito
### Objetivos Cuantificables
- **Consolidación**: 16+ símbolos en 8 tap dances
- **Reducción de capas**: Eliminar SYMBOL y SYMBOL2 (2 capas → 1)
- **Eficiencia**: Patrones comunes en 2-4 taps (!=, ==, &&, ||, =>, //)
- **Ergonomía**: Todo en mano derecha, sin stretching con pulgar ocupado
- **Velocidad**: Símbolos frecuentes en 1 tap sin latencia adicional
### Métricas de Seguimiento
- WPM antes/después de cada fase
- Análisis de heat maps de dedos
- Medición de fatiga subjetiva
- Time to proficiency para cada cambio
---
## 🚦 Estrategia de Implementación
### Principios Guía
1. **Incremental**: Una fase a la vez
2. **Evidence-based**: Medir antes de avanzar
3. **Reversible**: Backup configs para rollback
4. **Personal**: Adaptar a tu workflow específico
### Cronograma Recomendado
```
Semana 1-2: Usar Fase 1, evaluar beneficios
Semana 3-4: Implementar Fase 2 si Fase 1 exitosa
Mes 2-3: Fase 3 solo si necesario
Mes 4+: Fases 4-5 para usuarios power
```
### Criterios de Avance
- **Comfort level**: 90% proficiency antes de siguiente fase
- **Benefit validation**: Mejoras medibles en velocidad/comfort
- **Stability**: Sin regressions en typing accuracy
---
## 📚 Referencias y Recursos
### Estudios Base (2025)
- Home row mods timing optimization research
- Bigram frequency analysis for programming languages
- Ergonomic keyboard layout effectiveness studies
- QMK community best practices
### Herramientas de Análisis
- KeymapDB para comparación con otros layouts
- Typing speed analyzers
- Heat map generators
- SFB (Same-Finger Bigram) analyzers
### Comunidad y Soporte
- QMK Discord para troubleshooting
- r/ErgoMechKeyboards para feedback
- Keyboard layout optimization forums
---
## 🔄 Versionado
- **v1.0**: Análisis inicial y Fase 1 (Enero 2025)
- **v1.1**: Corrección HM_L y combos optimizados
- **v2.0**: (Planificado) Implementación Tap Dance para símbolos
- **v2.1**: (Planificado) Transición gradual con backup SYMBOL
- **v3.0**: (Planificado) Eliminación final de capas redundantes
---
*Documento creado: Enero 2025*
*Última actualización: Post-Fase 1*
*Próxima revisión: Post-implementación Fase 2*