Si desea vincular solo algunas secuencias de la forma Super + x, Super + c, Super + v a otras secuencias como Ctrl + x, Ctrl + c, Ctrl + v, por ejemplo, para que (como el OP lo desee) estas En particular, las secuencias de Superclave generalmente se asignarán para cortar y pegar sin afectar ningún otro uso de la Superclave en su sistema, es posible usando solo la extensión XKB. El siguiente procedimiento describe los pasos y ofrece dos ejemplos diferentes de los detalles para dos configuraciones de teclado de inicio diferentes; con suerte eso proporcionará suficiente información para adaptarse a su sistema. Se supone que se siente cómodo creando y editando archivos en su sistema, incluidos los que se encuentran en ubicaciones del sistema como /usr/share/X11/xkb
.
Decida dónde desea que resida su árbol de configuración XKB. Primero encuentre el sistema uno. Normalmente está en / usr / share / X11 / xkb, y no estoy muy seguro de cómo encontrarlo si no está allí; simplemente puede buscar en su sistema directorios llamados "xkb". De todos modos, una vez que lo haya encontrado, puede modificar el sistema en su lugar o puede usar cualquier directorio de su elección. La ventaja de utilizar el directorio del sistema es que puede invocar sus cambios con mucha más facilidad, pero el inconveniente es que las futuras actualizaciones del sistema podrían sobrescribir sus cambios (se le ha advertido). En cualquier caso, todos los nombres de archivo mencionados a continuación son relativos a este directorio, al que me referiré cuando sea necesario como $ XKBLOCAL $, y todos los comandos asumen que ese es su directorio actual.
Determine qué "tipo" de clave XKB son las claves x, c, v actuales. La forma más fácil de hacerlo es a través del comando xkbcomp -a $DISPLAY - | grep -C 6 c,
(tenga en cuenta que la coma se incluye intencionalmente en el patrón). En mi primer ejemplo de configuración, esto produce:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
mientras que en mi otra configuración de ejemplo esto produce
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
El resultado es que en el primer ejemplo, las claves relevantes son del tipo "ALPHABETIC", mientras que en el segundo ejemplo son del tipo "FOUR_LEVEL". Dependiendo de la configuración de su teclado, puede encontrar que son de algún otro tipo. En lo que sigue, el tipo se denominará $ TYPE $, que debe reemplazar con la cadena ALPHABETIC real o lo que sea en los comandos a continuación.
Encuentre la definición de $ TYPE $ y cópiela en un nuevo archivo en el directorio $ XKBLOCAL $ / types. Aquí hay un comando que hace precisamente eso: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. El nombre del archivo "cutpaste" que elegí es arbitrario, use el nombre que desee, pero tenga en cuenta que tendrá que referirse a este archivo constantemente en los pasos posteriores. En la primera configuración, este archivo obtiene el contenido
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
y en el otro ejemplo obtiene los contenidos
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Edite los tipos de archivo / pasta de corte para hacer dos cosas: agregue un preámbulo y postamble que lo convierta en una cláusula XKB adecuada, y modifique el nombre del tipo y la definición del tipo para agregar un nivel más producido por el modificador correspondiente a Super. Debe verificar cuál es ese modificador en su sistema, es probable que sea Mod4 como se usa a continuación. Las modificaciones necesarias deben ser evidentes a partir de los dos ejemplos de versiones finales de tipos / pasta de corte, a saber:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
y
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Copie las definiciones de símbolos de clave que fueron generadas por grep en el segundo paso en un segundo nuevo archivo de símbolos / corte, y agregue preámbulos y postamble similares, y modifique las definiciones para usar los nuevos tipos y agregue acciones a la definición para manejar la clave deseada producido por las versiones Super. Los resultados de esto en nuestros dos ejemplos son:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
y
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Tenga en cuenta que en el segundo ejemplo también eliminé algunos de los espacios en blanco (no significativos) para mantener la longitud de la línea bajo un poco de control.
Encuentre el nombre del conjunto de reglas que XKB está usando actualmente. Eso es fácil, se muestra en el resultado de setxkbmap -query
. En mi caso, fue "evdev".
Copie la versión del sistema de rules / evdev (o cualquiera que sea el nombre de su conjunto de reglas) en $ XKBLOCAL $ / rules / evdev y agregue reglas que apunten a las opciones que hemos creado. Aquí tiene dos opciones: puede copiar todo evdev o solo las partes que mencionan el modelo de teclado, el diseño, la variante y las opciones que realmente está utilizando. Por supuesto, si está modificando los archivos del sistema en su lugar, no necesita copiar, solo editar.
En este caso, lo que se agrega es idéntico independientemente de la configuración inicial del teclado, por lo que solo hay un ejemplo. Encuentra la sección del archivo de reglas que comienza con ! option = symbols
y agrega una línea cutpaste:super = +cutpaste
a esa sección, y también encuentra la sección del archivo de reglas que comienza con ! option = types
y una línea cutpaste:super = +cutpaste
a esa sección también.
Copie la versión del sistema de evdev.lst y agregue una línea para su nueva opción. Tenga en cuenta que el nombre de este archivo simplemente corresponde al nombre del archivo de reglas con .lst adjunto. Como en el paso anterior, puede copiar todo el archivo o solo la parte a la que hace referencia el modelo, el diseño, la variante y las opciones que está utilizando. Solo necesita encontrar la sección de este archivo que comienza con ! option
y agregar una línea como esta: cutpaste:super Add super equivalents of cut and paste operations
a esa sección.
OK, ahora todos los archivos de configuración están en su lugar. Si modificó los archivos del sistema, ahora puede invocar su nueva opción con setxkbmap -option cutpaste:super
. Por otro lado, si no lo hizo, debe informar a setxkbmap dónde está su directorio $ XKBLOCAL $. Lo que es peor, el servidor tampoco sabe dónde está ese directorio, y setxkbmap no lo sabe (o tal vez no puede, ya que en última instancia el servidor podría estar ejecutándose en otra máquina). Por lo tanto, debe canalizar la salida de setxkbmap a xkbcomp, y también decirle a ese comando dónde está su directorio $ XKBLOCAL. La línea de comando completa es por lo tanto setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Esperemos que esto sea de ayuda / interés para alguien, ya que la buena documentación / referencia definitiva de XKB es escasa. Una referencia muy útil fue http://madduck.net/docs/extending-xkb/ .