Emule el desplazamiento horizontal con la tecla Shift


13

Quiero emular el desplazamiento horizontal cuando uso mi rueda de desplazamiento (vertical) y presiono Shift.

En algunas aplicaciones (Chrom {e, ium}) esto ya funciona, pero estoy buscando una solución genérica para aplicaciones X.

Lo más cerca que llegué hasta ahora es xbindkeys+ xdotool.

# ~/.xbindkeysrc
"xdotool click 6"
  shift + b:4

"xdotool click 7"
  shift + b:5

El problema es que xbindkeysparece faltar algunos eventos, y ocasionalmente un desplazamiento vertical "pasa". Esto es muy molesto. Parece que xbindkeysestá utilizando algún tipo de encuesta?

Además, no me gusta generar cientos de comandos de shell por segundo.

Tengo una pantalla pequeña y tengo que desplazarme mucho horizontalmente.

¿Cómo puedo lograr el desplazamiento horizontal genérico?

ACTUALIZAR:

Hay otra manera que hace principalmente lo que quiero con xbindkeysy xmodmap.

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'"
  c:50
"xmodmap -e 'pointer = default'"
  release + shift + c:50

Cuando Shiftse mantiene presionado, los botones de puntero 4 y 5 se asignan a 6 y 7. (Los botones 4/5 son de desplazamiento vertical anterior y 6/7 para el desplazamiento horizontal). c:50Es la Shifttecla izquierda . Al soltar la tecla, se restaura la asignación de puntero predeterminada.

Esto resuelve muy bien el problema de "demasiados eventos". Sin embargo, la tecla Shift ya no funciona como modificador normal. Traté de volver a emitir los Shifteventos de prensa / lanzamiento de xdotoolesta manera:

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10';  xdotool keydown Shift_L"
  c:50
"xmodmap -e 'pointer = default';  xdotool keyup Shift_L"
  release + shift + c:50

De acuerdo con xevlos Shifteventos, pero creo que ya no se reconoce como un modificador. Por ejemplo, presionar Shift+ Ano produciría una mayúscula A.


1
También puede hacer desplazamiento horizontal con Ctrl + Flechas para muchos programas.
terdon

1
Gracias, pero esto no funciona para mí en Firefox. Estoy buscando una solución "genérica" ​​que funcione en todas partes.
Paul Schyska

¿Sería un problema ejecutar algo como root, por ejemplo, usando sudo?
brm

No es óptimo tener que sudo. ¿Supongo que te refieres a sudar cada vez que presionas Shift? ¿Podrías elaborar lo que tienes en mente?
Paul Schyska

Esto podría no tener sentido, pero una vez esto funcionó para mí ~/.xbindkeysrc.scm. En algún momento falló, pero podría funcionar en su sistema.
Sparhawk

Respuestas:


2

Encontré una solución aceptable para mí.

No encontré una manera de usar Shiftni ninguna otra tecla como mi modificador para rotar el eje de la rueda mientras se presiona.

Ahora estoy usando un simple .xbindkeysrccon un botón de alternar:

"~/toggle.sh"
  alt + x

El script toggle.sh se ve así:

#!/bin/sh
on()
{
  xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'
}

off()
{
  xmodmap -e 'pointer = default'
}

if xmodmap -pp | grep -q '4.*6'; then
  off
else
  on
fi

Esto me permite alternar el comportamiento. Cuando presiono Alt+ X, el eje de la rueda del mouse gira y cuando lo presiono nuevamente, se establece en el valor predeterminado.

Eso debería funcionar por ahora.

Si alguien encuentra una manera de hacerlo Shiftcomo un "modificador" (el eje del mouse gira mientras está presionado), hágamelo saber.

EDITAR: Como Alt+ xes una tecla de acceso rápido comúnmente utilizada, la cambié a:

(xbindkey '(control "b:3") "toggle-wheel.sh")

(Cambié a la configuración de guile, por lo que lo anterior debería estar en un archivo llamado .xbindkeysrc.scm)

Esto alternará la dirección de la rueda de desplazamiento con Ctrl+ botón derecho del mouse.


0

Podrías usar btnx y es la herramienta de configuración gui .

Paquete Ubuntu más reciente y aquí

Después de hacer la detección del botón en su mouse usando btnx-config, simplemente asigne "Desplazarse hacia arriba" junto con un modificador de botón de desplazamiento a cualquier botón x que desee presionar.


Gracias, sin embargo, tengo un problema para que se cree en fedora.
Paul Schyska

1
Encontré un paquete rpm para btnx ahora. No encuentro una manera de asignar un modificador como un evento fuente (es decir, Shift + WheelUp). Solo puedo asignar desde WheelUp a Shift + alguna otra tecla. ¿Me estoy perdiendo de algo? También intenté "detectar" Shift + WheelUp en primer lugar, pero decía "Botón ya mapeado". El código sin procesar fue 0x02010008 para ambos casos (Shift presionado y no presionado). No creo que btnx pueda manejar múltiples dispositivos de entrada (Mouse + Teclado)
Paul Schyska

0

Como se insinuó aquí , instalé imwheel , luego creé ~/.imwheelrccon el siguiente contenido.

".*"
Shift_L, Up, Left
Shift_L, Down, Right

Entonces corrí imwheel -b 45en la terminal. Lo probé y no he notado los problemas diagonales asociados con el desplazamiento alto y las teclas xbindkeys.

NB -b 45restringe la imwheelcaptura solo de desplazamiento hacia arriba y hacia abajo, evitando que bloquee (p. Ej.) Los xbindkeysenlaces de los botones del pulgar.

Problemas

Sin embargo, hay varios problemas asociados con esto.

  • Es inconsistente. Podría hacer que funcionara con Firefox y Gwenview fuera de la caja, pero Inkscape y GIMP no funcionaron. Podría usar la coincidencia de ventanas para no coincidir con Inkscape / GIMP, pero debería haber alguna forma de que funcione de manera universal.
  • Peor aún, evita algunos otros eventos predeterminados, como Ctrl+ Scroll wheel, que normalmente se usa para hacer zoom. He intentado poner las cosas como Control_L, Up, Control_L|Upen ~/.imwheelrc, pero esto no funcionó.
  • imwheelenvía eventos de rueda de desplazamiento horizontal a la ventana activa, no a la ventana debajo del cursor del mouse. Esto es contrario al comportamiento predeterminado de la rueda de desplazamiento. Esto también sugiere que la Ctrlsolución en el punto anterior también sería subóptima.
  • imwheelParece que ya no está en desarrollo. Se ha quedado atascado en la versión preliminar durante los últimos 10 años (desde 2004).
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.