2009-10-13 13 views
7

Estoy buscando una manera de agregar un "diseño" más a mi teclado. Ya estoy usando un diseño que usa altgr para las letras del alfabeto local. Lo que me gustaría añadir es un teclado reflejado en el lado derecho que se activa con el bloqueo de mayúsculas (uno descrito en http://xkcd.com/mirrorboard.xkb)reasignación de teclado con más modificadores

Desafortunadamente ISO_LEVEL3_SHIFT ya está tomado por el alfabeto local. (AFAIK) Si uso mode_shift para cambiar de grupo, ya no puedo usar más de 2 niveles en un grupo. ¿Hay alguna manera de crear diferentes grupos para altgr y mode_shift?

+0

Esta pregunta se trata básicamente de compilar un mapa de teclas de una manera bastante inusual que necesita hacks de bajo nivel. Pensé en ponerlo en superusuario, pero no va a obtener ninguna respuesta allí. Está más cerca de la programación (sí, esto es básicamente la programación de xkb) que simplemente ajustar su configuración (que es en lo que se especializa el superusuario). – viraptor

Respuesta

11

Para cada definición de código clave puede tener hasta ocho keysyms. Estos se organizan por pares en cuatro grupos. Hay una familia de keysyms ISO_Next_Group, ISO_Prev_Group, ISO_First_Group y que, cuando se presiona, cíclican la salida keysym pulsando la tecla entre los grupos keysym. Estas claves son cómo logras múltiples diseños.

Como un ejemplo, suponiendo ISO_Next_Group se ha unido a un código clave y asignado a un modificador, a continuación, para esta definición:

keycode 53 = x X Greek_xi Greek_XI multiply U2297 U24E7 U24CD

presionando mi tecla del teclado con la etiqueta de “X” en la tipos out “x” . Después de presionar la tecla ISO_Next_Group, obtengo "ξ". Presionándolo de nuevo, obtengo "×". Presionándolo nuevamente, "ⓧ". Finalmente, presionarlo por cuarta vez hace que las cosas vuelvan a la normalidad.


Tener pasar varios días (porque Xkb¹ tiene documentación horrible, finalmente encontró un guía bien here), se puede crear un archivo de definición de símbolo con las entradas de la siguiente manera:

 
    key <SPCE> { 
// Level I  II  III IV 
     [ space, space, U2395, U2592 ], // Group 1 
     [ U2423, emspace, U2420, hairspace ] // Group 2 
    }; 

    key <RALT> { 
     [ Mode_switch, Mode_switch ] 
    }; 

    key <RCTL> { 
     [ ISO_Level3_Shift, ISO_Level3_Shift ] 
    }; 

Los corchetes encierran un único grupo. Normalmente, el primer grupo está activo. El grupo puede incrementarse temporalmente en uno con ISO_Group_Shift, a.k.a. Mode_switch. Dentro de un grupo, los símbolos emitidos se definen en niveles crecientes. El nivel I es con una simple pulsación de tecla. Shift agrega uno al nivel actual. ISO_Level3_Shift establece el nivel en III.

El ejemplo anterior mapas de siete símbolos a la barra de espacio, además de varias teclas de desplazamiento tal que:

espacio ⟨⟩ U + 0020 SPACE
Shift + espacio ⟨⟩ U + 0020 SPACE
R. Alt + espacio ⟨␣⟩ U + 2423 ABRIR CAJA
R. Alt + Shift + espacio ⟨⟩ U + 2003 EM eSPACIO
R. Ctl + espacio ⟨⎕⟩ U + 2395 APL SÍMBOLO FUNCIONAL QUAD
R. Ctl + Shift + espacio ⟨▒⟩ U + 2592 MEDIO SHADE
R. Alt + R. Ctl. + Espacio ⟨␠⟩ U + 2420 SÍMBOLO DE ESPACIO
R. Alt + R. Ctl.+ Shift + espacio ⟨⟩ U + 200A HAIR ESPACIO

También hay una clave ISO_Level5_Shift para V. nivel Así que puedes tener al menos seis símbolos de una sola planta. Con la tecla de cambio de modo, esto implica que puede configurar su teclado para escribir aproximadamente 1,200 símbolos distintos, pero en ese momento, mantener apretados tantos modificadores probablemente amortiguará algunas teclas.

P.S. Los nombres de todos los símbolos nombrados se almacenan en /usr/include/X11/keysymdef.h.


¹ Resulta que xmodmap (1) está libre de errores y en desuso.

+0

Solo me pregunto: ¿hay alguna manera de hacer que una tecla sea un modificador de esa manera? ¿Para que ISO_Next_Group en prensa y ISO_Prev_Group en lanzamiento? – viraptor

Cuestiones relacionadas