XKB: reasigna las teclas de flecha y conserva el comportamiento de desplazamiento para seleccionar texto

XKB: reasigna las teclas de flecha y conserva el comportamiento de desplazamiento para seleccionar texto

Me doy cuenta de que la reasignación de teclas de flecha es un problema antiguo, sin embargo, parece que no puedo encontrar una buena solución que me permita seleccionar texto con SHIFT + teclas reasignadas como lo haría con las teclas de flecha estándar.

Por ejemplo, si reasigno Bloq Mayús a ISO_Level3_Shift y configuro xkb_symbols para leer

key <AC08>  { [         k,          K , Down, Down] };

o

key <AC08>  { type="THREE_LEVEL",
              [         k,          K , Down ]  };

Al presionar Mayús+Bloq Mayús+K se comportará exactamente como Bloq Mayús+K (mientras que Mayús+Abajo se comporta de manera diferente a Abajo solo).

Tuve algo más de éxito usando utilidades macro de nivel superior y generando eventos de teclado (es decir, generar las pulsaciones de teclas de mayúsculas y flechas); Sin embargo, ese enfoque tiene una serie de problemas diferentes (a menudo, la respuesta de la interfaz de usuario a una pulsación de tecla simulada es diferente de la pulsación de tecla "real" y también hay problemas de rendimiento). Puedo escribir más rápido de lo que la cosa puede manejar.

Tl;dr; ¿Cómo se puede seleccionar Mayús usando las teclas de flecha reasignadas debajo de X?

Respuesta1

Puedes usar preservepara eso: agrega a tu definición de tipo (por ejemplo THREE_LEVEL) la línea

preserve[LevelThree+Shift] = Shift;

Esto le dice a xkb que conserve el modificador de desplazamiento cuando determine el nivel apropiado de su combinación de modificadores en el caso de LevelThree + Shift. El modificador de turno se pasa para que lo utilice el kit de herramientas o la aplicación (consulte también aquí:usando preservar con tipos).

Tenga en cuenta que esto tiene un impacto, por ejemplo, en cómo la aplicación interpreta las combinaciones de teclas: si hubiera definido lo anterior preservar y

key <AC08> { type="THREE_LEVEL", [ k, K, kappa ]  };

y presionaría, Ctrl + Shift + LevelThree + <AC08>la aplicación lo leería como una combinación de teclas Ctrl + Shift + kappa(en lugar de normalmente Ctrl + kappa) porque el modificador de mayúsculas se conserva y se pasa a la aplicación.

información relacionada