xcape le permite usar una tecla modificadora como otra tecla cuando se presiona y suelta por sí sola. Tenga en cuenta que es un poco más lento que presionar la tecla original, porque el evento presionado no ocurre hasta que se suelta la tecla. El comportamiento predeterminado es generar la tecla Escape cuando se presiona y suelta el control izquierdo por sí solo. (Si no entiendes por qué alguien querría esto, supongo que Vim no es tu editor de texto favorito;)
Primero instale las dependencias de desarrollo. En sistemas basados en Debian (incluidos Ubuntu y Linux Mint), ejecute:
$ sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev
En sistemas basados en Fedora, ejecute:
$ sudo dnf install git gcc make pkgconfig libX11-devel libXtst-devel libXi-devel
Luego ejecuta:
$ git clone https://github.com/alols/xcape.git
$ cd xcape
$ make
$ sudo make install
$ xcape [-d] [-f] [-t <timeout ms>] [-e <map-expression>]
-d
Modo de depuración. No pasa al fondo. Imprime información de depuración.
-f
Modo de primer plano. No pasa al fondo.
-t <timeout ms>
Si mantiene presionada una clave por más tiempo que este tiempo de espera, xcape no generará un evento de clave. El valor predeterminado es 500 ms.
-e <map-expression>
La expresión tiene la gramática 'ModKey=Key[|OtherKey][;NextExpression]'
La lista de nombres de claves se encuentra en el archivo de encabezado X11/keysymdef.h
(elimine el prefijo XK_
). Tenga en cuenta que, debido a las limitaciones de X11, las teclas desplazadas deben especificarse como una tecla de mayúsculas seguida de la tecla que se va a presionar en lugar del nombre real del carácter. Por ejemplo, para generar "{", se podría usar la expresión 'ModKey=Shift_L|bracketleft'
(suponiendo que tenga una clave con "{" encima de "[").
También puede especificar claves en decimal (prefijo #
), octal ( #0
) o hexadecimal ( #0x
). Se interpretarán como códigos clave a menos que no se encuentre el nombre de clave correspondiente.
Esto hará que Mayús izquierda genere Escape cuando se presione y suelte por sí solo, y Control izquierdo genere una combinación Ctrl-O cuando se presione y suelte por sí solo.
xcape -e 'Shift_L=Escape;Control_L=Control_L|O'
Junto con xmodmap, es posible hacer que una tecla normal actúe como modificador adicional. Primero asigne la clave al modificador con xmodmap y luego el modificador nuevamente a la clave con xcape. Sin embargo, esto tiene varias limitaciones: la tecla no funcionará normalmente hasta que se suelte y, en particular, puede actuar como un modificador sin querer si escribe demasiado rápido. Esto no es un error en xcape, sino una consecuencia inevitable del uso conjunto de estas dos herramientas de esta manera. Como ejemplo, podemos hacer que la barra espaciadora funcione como una tecla Ctrl adicional cuando se mantiene presionada (similar a Space2ctrl) con la siguiente secuencia de comandos.
# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"
# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"
# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"
Si tiene el hábito de reasignar códigos clave a keyyms (por ejemplo, usando xmodmap), puede encontrar dos problemas.
Deberá reiniciar xcape cada vez que modifique la asignación de códigos clave a símbolos clave (por ejemplo, con xmodmap), o xcape seguirá usando la asignación anterior.
La clave que desea enviar debe tener un código clave definido. Entonces, por ejemplo, con el mapeo predeterminado Control_L=Escape
, aún necesita una clave de escape definida en su mapeo xmodmap. (Lo soluciono usando 255, que mi teclado no puede enviar).
Encuentre la última versión en https://github.com/alols/xcape
Puede comunicarse con el autor en albin dot olsson en gmail dot com.