Emule a rolagem horizontal com a tecla Shift

13

Quero emular a rolagem horizontal quando usar minha roda de rolagem (vertical) e pressionar Shift.

Em alguns aplicativos (Chrom {e, ium}) isso já funciona, mas estou procurando uma solução genérica para aplicativos X.

O mais próximo que cheguei até agora é xbindkeys+ xdotool.

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

"xdotool click 7"
  shift + b:5

O problema é que xbindkeysparece perder alguns eventos e, ocasionalmente, um rolo vertical "passa". Isso é muito chato. Parece que xbindkeysestá usando algum tipo de pesquisa?

Também não gosto de gerar centenas de comandos de shell por segundo.

Eu tenho uma tela pequena e tenho que rolar muito horizontalmente.

Como posso obter rolagem horizontal genérica?

ATUALIZAR:

Existe outra maneira de fazer principalmente o que eu quero com xbindkeyse xmodmap.

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

Quando Shiftpressionado, os botões apontadores 4 e 5 são mapeados para 6 e 7. (Os botões 4/5 são a rolagem vertical anterior e 6/7 para a rolagem horizontal). c:50é a Shifttecla esquerda . Na liberação da tecla, o mapeamento padrão do ponteiro é restaurado.

Isso resolve bem o problema "muitos eventos". No entanto, a tecla Shift não funciona mais como modificador normal. Tentei reeditar os Shifteventos de imprensa / comunicado da xdotoolseguinte forma:

"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 acordo com xevos Shifteventos, mas acho que não é mais reconhecido como um modificador. Por exemplo, pressionar Shift+ Anão produzirá maiúsculas A.

Paul Schyska
fonte
1
Você também pode fazer rolagem horizontal com Ctrl + Arrows para muitos programas.
terdon
1
Obrigado, mas isso não funciona para mim no Firefox. Estou procurando uma solução "genérica" ​​que funcione em qualquer lugar.
Paul Schyska
Seria um problema executar algo como root, por exemplo, usando o sudo?
brm
Não é ideal ter que sudo. Eu suponho que você quer dizer sudo toda vez que Shift é pressionada? Você poderia elaborar o que tem em mente?
Paul Schyska
Isso pode ser inútil, mas era uma vez isso funcionou para mim ~/.xbindkeysrc.scm. Em algum momento, ele falhou, mas pode funcionar no seu sistema.
Sparhawk

Respostas:

2

Encontrei uma solução aceitável para mim.

Não encontrei uma maneira de usar Shiftou qualquer outra tecla do meu modificador para girar o eixo da roda enquanto ele estiver pressionado.

Agora estou usando um simples .xbindkeysrccom um botão de alternância:

"~/toggle.sh"
  alt + x

O script toggle.sh se parece com o seguinte:

#!/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

Isso me permite alternar o comportamento. Quando pressiono Alt+ X, o eixo da roda do mouse é girado e, quando pressiono novamente, é definido como o padrão.

Isso deve funcionar por enquanto.

Se alguém encontrar uma maneira de fazer isso Shiftcomo um "modificador" (o eixo do mouse gira enquanto é pressionado), informe-me.

EDIT: como Alt+ xé uma tecla de atalho comumente usada, eu a mudei para:

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

(Eu mudei para a configuração do guile, portanto, o texto acima deve estar em um arquivo chamado .xbindkeysrc.scm)

Isso alternará a direção da roda de rolagem com Ctrlo botão + direito do mouse.

Paul Schyska
fonte
0

Você pode usar o btnx e sua ferramenta de configuração da GUI .

Pacote Ubuntu mais recente e aqui

Depois de fazer a detecção do botão no mouse usando o btnx-config, basta mapear "Scroll Up" junto com um modificador de botão shift para o botão x pressionado que você deseja.

RedMage
fonte
Obrigado, estou tendo um problema em fazê-lo construir no fedora.
Paul Schyska
1
Encontrei um pacote rpm para o btnx agora. Não encontro uma maneira de mapear um modificador como um evento de origem (por exemplo, Shift + WheelUp). Só posso mapear do WheelUp para o Shift + alguma outra tecla. Estou esquecendo de algo? Eu também tentei "detectar" Shift + WheelUp em primeiro lugar, mas dizia "Botão já mapeado". O código bruto era 0x02010008 para os dois casos (Shift pressionado e não pressionado). Eu não acho que btnx pode lidar com múltiplos dispositivos de entrada em tudo (mouse + teclado)
Paul Schyska
0

Como sugerido aqui , instalei o imwheel e criei ~/.imwheelrccom o seguinte conteúdo.

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

Eu então corri imwheel -b 45no terminal. Eu testei e não notei os problemas diagonais associados à rolagem alta e xbindkeys.

O NB -b 45restringe imwheela captura apenas da rolagem para cima e para baixo, impedindo que ela bloqueie (por exemplo) as xbindkeysligações dos botões de polegar.

Problemas

No entanto, existem vários problemas associados a isso.

  • É inconsistente. Eu consegui fazê-lo funcionar com o Firefox e o Gwenview imediatamente, mas o Inkscape e o GIMP não funcionaram. Eu poderia usar a correspondência de janelas para não corresponder ao Inkscape / GIMP, mas deve haver uma maneira de fazê-lo funcionar universalmente.
  • Pior ainda, evita alguns outros eventos padrão, como Ctrl+ Scroll wheel, que normalmente é usado para aumentar o zoom. Eu tentei colocar as coisas como Control_L, Up, Control_L|Upem~/.imwheelrc , mas isso não funcionou.
  • imwheelenvia eventos de roda de rolagem horizontal para a janela ativa, não a janela sob o cursor do mouse. Isso é contrário ao comportamento padrão da roda de rolagem. Isso também sugere que a Ctrlsolução alternativa no ponto acima também seria subótima.
  • imwheelparece não estar mais em desenvolvimento. Está preso na versão de pré-lançamento nos últimos 10 anos (desde 2004).
Sparhawk
fonte