mirror of
https://github.com/qmk/qmk_userspace.git
synced 2025-09-19 02:11:36 -04:00
add combos
This commit is contained in:
parent
b7c9010abd
commit
5e5a529a37
4 changed files with 296 additions and 7 deletions
266
docs/keyboard-optimization-plan.md
Normal file
266
docs/keyboard-optimization-plan.md
Normal file
|
@ -0,0 +1,266 @@
|
|||
# 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 Reorganización de Símbolos por Frecuencia
|
||||
|
||||
**Análisis actual**:
|
||||
- Paréntesis `()` en posiciones incómodas (anular derecho)
|
||||
- Llaves `{}` en row inferior (menos accesible)
|
||||
- Operadores `=+-` separados geográficamente
|
||||
|
||||
**Optimización propuesta**:
|
||||
```
|
||||
SYMBOL layer mejorada:
|
||||
Row superior: Símbolos menos frecuentes
|
||||
Home row: () [] {} <> (brackets principales)
|
||||
Row inferior: Operadores y símbolos especiales
|
||||
Thumbs: = - + (acceso inmediato)
|
||||
```
|
||||
|
||||
**Impacto**: Reducción 30% en movimiento lateral para programación
|
||||
|
||||
### 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 Fusión de Capas SYMBOL
|
||||
|
||||
**Problema actual**: SYMBOL y SYMBOL2 fragmentan símbolos relacionados
|
||||
|
||||
**Nueva organización**:
|
||||
```
|
||||
Unified SYMBOL layer:
|
||||
- Brackets y parentheses agrupados
|
||||
- Operadores matemáticos juntos
|
||||
- Símbolos de programación ($, @, #, %, etc.) organizados por frecuencia
|
||||
- Eliminación de redundancias
|
||||
```
|
||||
|
||||
**Beneficio**: Una capa menos que memorizar, símbolos más lógicamente agrupados
|
||||
|
||||
### 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
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Fase 5 - Optimizaciones Avanzadas
|
||||
|
||||
### 5.1 Análisis de Bigrams Personalizado
|
||||
|
||||
**Metodología**:
|
||||
1. Recopilar datos reales de typing (1-2 semanas)
|
||||
2. Analizar patrones específicos de tu código
|
||||
3. Identificar same-finger bigrams (SFBs) problemáticos
|
||||
4. Reorganizar layout basado en datos personales
|
||||
|
||||
### 5.2 Configuración Adaptativa
|
||||
|
||||
**Features avanzadas**:
|
||||
- Profiles automáticos por contexto
|
||||
- Machine learning para optimización continua
|
||||
- Integration con IDEs y herramientas
|
||||
|
||||
---
|
||||
|
||||
## 📈 Métricas de Éxito
|
||||
|
||||
### Objetivos Cuantificables
|
||||
- **Reducción de SFBs**: 40% menos same-finger bigrams
|
||||
- **Velocidad**: +10-15% en typing de código
|
||||
- **Fatiga**: 30% menos movimiento lateral de dedos
|
||||
- **Ergonomía**: Eliminación de painful stretches
|
||||
|
||||
### 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 Fase 2
|
||||
- **v3.0**: (Planificado) Unificación de capas SYMBOL
|
||||
|
||||
---
|
||||
|
||||
*Documento creado: Enero 2025*
|
||||
*Última actualización: Post-Fase 1*
|
||||
*Próxima revisión: Post-implementación Fase 2*
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#define LAYER_STATE_16BIT
|
||||
|
||||
#define TAPPING_TERM 220
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
# define SPLIT_LAYER_STATE_ENABLE
|
||||
|
@ -17,3 +17,10 @@
|
|||
|
||||
#define DYNAMIC_KEYMAP_LAYER_COUNT 9
|
||||
|
||||
// Home row mods optimization
|
||||
#define PERMISSIVE_HOLD
|
||||
#define QUICK_TAP_TERM 120
|
||||
#define BILATERAL_COMBINATIONS
|
||||
#define BILATERAL_COMBINATIONS_TYPING_STREAK_TIMEOUT 160
|
||||
#define COMBO_TERM 30
|
||||
|
||||
|
|
|
@ -77,6 +77,21 @@ enum layer_names {
|
|||
#define L_QUOT LT(_UTIL, KC_QUOT)
|
||||
|
||||
|
||||
// Combo definitions
|
||||
const uint16_t PROGMEM combo_esc[] = {HM_J, HM_K, COMBO_END};
|
||||
const uint16_t PROGMEM combo_tab[] = {HM_D, HM_F, COMBO_END};
|
||||
const uint16_t PROGMEM del_word_r[] = {HM_K, HM_L, COMBO_END};
|
||||
const uint16_t PROGMEM del_word_l[] = {HM_S, HM_D, COMBO_END};
|
||||
const uint16_t PROGMEM combo_enter[] = {KC_COMM, KC_DOT, COMBO_END};
|
||||
|
||||
combo_t key_combos[] = {
|
||||
COMBO(combo_esc, KC_ESC),
|
||||
COMBO(combo_tab, KC_TAB),
|
||||
COMBO(del_word_r, C(KC_BSPC)),
|
||||
COMBO(del_word_l, C(KC_DEL)),
|
||||
COMBO(combo_enter, KC_ENTER),
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
DV_ARR = SAFE_RANGE, // Print C# lambda arrow
|
||||
DV_CMNT, // Comment line
|
||||
|
@ -115,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_SYMBOL] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, C(KC_Z), C(KC_X), C(KC_C), C(KC_V),RCS(KC_V), XXXXXXX, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_AMPR,KC_MINUS, KC_LPRN, KC_RPRN, KC_EXLM, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
@ -127,7 +142,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_SYMBOL2] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, C(KC_Z), C(KC_X), C(KC_C), C(KC_V),RCS(KC_V), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_AT, KC_HASH, KC_DLR, KC_PERC, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
@ -139,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_NAV] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, C(KC_Z), C(KC_X), C(KC_C), C(KC_V),RCS(KC_V), XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PGUP, KC_LEFT, KC_DOWN,KC_RIGHT, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
@ -151,7 +166,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_DEV] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, DV_TRM, DV_NVBW, DV_NVFW, DV_CMNT,DV_UNCMT, RCS(KC_V), C(KC_V), C(KC_C), C(KC_X), C(KC_Z), XXXXXXX,
|
||||
XXXXXXX, DV_TRM, DV_NVBW, DV_NVFW, DV_CMNT,DV_UNCMT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, DV_BRKP, DV_SOUT, DV_SIN, DV_SOVR, DV_BLD, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
@ -163,7 +178,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_FUNC] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, RCS(KC_V), C(KC_V), C(KC_C), C(KC_X), C(KC_Z), XXXXXXX,
|
||||
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PAUS, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
@ -175,7 +190,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
[_MEDIA] = LAYOUT_split_3x6_3(
|
||||
//,-----------------------------------------------------. ,-----------------------------------------------------.
|
||||
XXXXXXX, XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, KC_MPRV, RCS(KC_V), C(KC_V), C(KC_C), C(KC_X), C(KC_Z), XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, KC_MPRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, KC_MPLY, XXXXXXX, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
|
||||
|
|
|
@ -13,3 +13,4 @@ MOUSEKEY_ENABLE = yes
|
|||
SPACE_CADET_ENABLE = no
|
||||
GRAVE_ESC_ENABLE = no
|
||||
MAGIC_ENABLE = no
|
||||
COMBO_ENABLE = yes
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue