Emular a rolagem horizontal com a tecla Shift

13

Eu quero emular a rolagem horizontal quando uso minha roda de rolagem (vertical) e pressiono 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 xbindkeys parece perder alguns eventos e, ocasionalmente, uma rolagem vertical "passa". Isso é muito chato. Parece que xbindkeys está usando algum tipo de pesquisa?

Além disso, não gosto de gerar centenas de comandos de shell por segundo.

Eu tenho uma tela pequena e tenho que rolar muito na horizontal.

Como posso alcançar a rolagem horizontal genérica?

ATUALIZAÇÃO:

Existe outra maneira que faz principalmente o que eu quero com xbindkeys e 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 Shift é mantido, os botões de ponteiro 4 e 5 são mapeados para 6 e 7. (Os botões 4/5 são a rolagem vertical e 6/7 para a rolagem horizontal). c:50 é a tecla esquerda Shift . Na liberação da tecla, o mapeamento de ponteiro padrão é restaurado.

Isso resolve muito bem o problema "muitos eventos". No entanto, a tecla Shift não funciona mais como modificador normal. Tentei reemitir os eventos de pressionar / liberar Shift com xdotool da seguinte 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 xev , os eventos Shift passam, mas acho que ele não é mais reconhecido como um modificador. Por exemplo, pressionar Shift + A não produziria uma maiúscula A .

    
por Paul Schyska 28.01.2014 / 21:53

3 respostas

2

Eu encontrei uma solução aceitável para mim.

Eu não encontrei uma maneira de usar Shift ou qualquer outra tecla como meu modificador para girar o eixo da roda enquanto ele estiver pressionado.

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

"~/toggle.sh"
  alt + x

O script toggle.sh é assim:

#!/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, ele é definido como o padrão.

Isso deve funcionar por enquanto.

Se alguém encontrar uma maneira de fazer isso com Shift como um "modificador" (o eixo do mouse gira enquanto estiver pressionado), por favor me avise.

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

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

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

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

    
por 03.02.2014 / 21:31
0

Você pode usar btnx e é ferramenta de configuração do gui .

Mais recente pacote do Ubuntu e aqui

Depois de fazer a detecção do botão do seu mouse usando btnx-config, apenas mapear "Scroll Up" junto com um modificador de botão shift para qualquer botão x pressionando.

    
por 03.02.2014 / 19:00
0

Como sugerido aqui , instalei imwheel , em seguida, criou ~/.imwheelrc com o seguinte conteúdo.

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

Eu então executei imwheel -b 45 no terminal. Eu testei, e eu não notei os problemas diagonais associados com alta rolagem e xbindkeys.

N.B. -b 45 restringe imwheel para capturar apenas a rolagem para cima e para baixo, impedindo o bloqueio (por exemplo) de xbindkeys de ligações para botões de polegar.

Problemas

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

  • É inconsistente. Eu poderia fazê-lo funcionar com o Firefox e Gwenview fora da caixa, mas o Inkscape e o GIMP não funcionavam. Eu poderia usar a correspondência de janela para não coincidir com o Inkscape / GIMP, mas deve haver alguma maneira de fazer isso funcionar universalmente.
  • Ainda pior, isso evita alguns outros eventos padrão, como Ctrl + Roda de rolagem , que normalmente é usada para aplicar zoom. Eu tentei colocar coisas como Control_L, Up, Control_L|Up em ~/.imwheelrc , mas isso não funcionou.
  • imwheel envia eventos de roda de rolagem horizontal para a janela ativa, não a janela sob o cursor do mouse. Isso é contra o comportamento padrão da roda de rolagem. Isso também sugere que a solução alternativa Ctrl no ponto acima também seria sub-ótima.
  • imwheel parece não estar mais em desenvolvimento. Está preso na versão de pré-lançamento nos últimos 10 anos (desde 2004).
por 20.08.2014 / 17:48

Tags