No Linux, como posso mapear SHIFT_L / SHIFT_R quando pressionado sem chave adicional?

13

Hoje encontrei este artigo muito legal de Steven Losh em que ele apresenta um par de mapeamentos de teclado de aumento de produtividade. Entre eles, está um mapeamento dinâmico das teclas shift esquerda e direita.

A ideia

Quando Shift_L ou Shift_R são pressionados sem uma chave adicional, eles são mapeados para '(' e ')' respectivamente, caso contrário, eles funcionam normalmente.

O problema

Ele faz tudo isso sob o OSX. Eu estou tentando conseguir o mesmo no Linux. Não existe uma maneira simples para isso, pois, como eu entendo, você não pode usar o xmodmap para configurar uma chave apenas para Shift_L e outra para Shift quando usada como uma tecla modificadora.

Eu pesquisei um pouco e encontrei pessoas tentando fazer o mesmo no Windows, o que é aparentemente possível usando o AutoHotKey, mas não consegui encontrar nada para o Linux.

Existe uma maneira de resolver isso no Linux?

    
por gilligan 05.01.2013 / 00:47

3 respostas

4

Uau! Comentário do usuário teika kazura sobre a questão original é bastante correto - não só isso é efetivamente uma duplicata de que xcape ") resolve esse problema!

Depois de clonar o repositório xpo e compilar (eu tive que instalar o libXtst-devel na minha caixa do Fedora, primeiro), consegui obter o comportamento exato solicitado com o seguinte comando:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Após testes reconhecidamente superficiais, parece funcionar extremamente bem. Nice!

Outras opções

Se você usar a tecla Shift como um modificador do mouse (ou seja, se você clicar em qualquer coisa), provavelmente desejará incluir a opção de tempo limite do xcape e encontrar um valor de tempo limite confortável, para que as teclas Shift sejam usadas em combinação com o mouse não gera parênteses espúrios. A partir do xcape README:

-t <timeout ms>

If you hold a key longer than this timeout, xcape will not generate a key event. Default is 500 ms.

Assim, ao incluir o sinal -t com um valor de tempo limite que funciona para você, você ainda poderá clicar com o mouse enquanto estiver pressionado a tecla Shift pelo menos timeout ms milissegundos.

(Crédito, novamente, para teika kazura por apontar a outra questão, e também para don_crissti para a resposta original lá.)

    
por 12.06.2013 / 09:37
1

É um desafio interessante, e eu concordo que o xinput não parece ser perfeitamente adequado. Passei algum tempo mexendo nas habilidades do xmodmap, e cheguei tão frustrantemente perto de alcançar o que você quer fazer ... sem realmente conseguir chegar lá.

Usando o xmodmap, é possível atribuir o parenleft como um símbolo de teclas na tecla left-shift:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

qual sorta funciona, pelo menos em testes na minha caixa do Fedora 17, mas não de forma satisfatória. Descobri que, com esse mapeamento em vigor, a tecla Shift ainda funcionava normalmente e não apresentava parênteses espúrios, mas (frustrantemente) não produzia de forma confiável os parênteses esquerdos. Por alguma razão, a chave não parece modificar de forma confiável o propriamente dito , o que quebra sua atribuição deslocada ... inicialmente. Seja qual for a razão, bater o deslocamento para a esquerda algumas vezes sucessivas acabaria fazendo com que ele começasse a produzir parêntesis esquerdos, mas somente após a quarta ou quinta impressão.

Um comportamento que eu fiz notou, no entanto, que você poderia trabalhar com um analógico "próximo o suficiente": descobri que depois de mapear parenleft e parenright para Shift_L e Shift_R, eu pude confiantemente digite parens "rolando" pelas duas teclas shift - em outras palavras, com este mapeamento:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

pressionando Shift_L seguido por Shift_R, então liberando ambos, produziria um parênquima direito ou um parênquima esquerdo na outra direção. (É claro que os mapeamentos de paren podem ser revertidos; não consigo decidir qual caminho me parece mais "natural".)

Isso foi o mais perto que cheguei de alcançar o comportamento exato que você está procurando; não parece ser possível usar o xmodmap sozinho.

Eu estava meio convencido de que simplesmente não é possível, ponto final, mas depois percebi que há pelo menos uma tecla que funciona exatamente como você descreve: A tecla Super ("Windows") . Sob o Gnome Shell, é uma tecla modificadora (mod4), que produz um efeito diferente (triggering Overview) quando pressionada sozinha. Assim, pelo menos em teoria, pode ser possível implementar a sobrecarga de teclas de deslocamento desejada da mesma maneira.

... Mas, eu não tenho absolutamente nenhuma ideia de como isso seria feito, ou o quão invasivo seria ficar atolado no processamento necessário toda vez que você apertar a tecla Shift. : -)

    
por 25.01.2013 / 06:21
0

talvez pareça um xbindkeys para alterar o mapeamento de chaves ou apenas encontrar um bom plugin de codificação para o vim ou gedit ou o que você quiser usar ou codificar o seu próprio.

ferramentas para alterar os mapas de teclado link

talvez link

e escreva um script para ativá-lo.

    
por 11.01.2013 / 11:17