Como posso mapear as teclas Shift esquerda e direita individualmente?

10

Primeiro, desculpe minha ignorância sobre X e XKB; Eu tenho tentado hackear uma solução na esperança de conseguir o que quero sem exigir uma compreensão detalhada dela.

Estou tentando criar um mapa de teclado XKB no Ubuntu 12.04 que me permite estipular qual das duas teclas Shift constitui o modificador Level2. Especificamente, a 4tecla deve produzir apenas a $quando o turno direito é pressionado, não o esquerdo.

Minha leitura até agora:

Tentei definir um tipo personalizado e depois referi-lo explicitamente em um mapa de símbolos:

/usr/share/X11/xkb/types/mbfisher:

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher:

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

Depois, seleciono o mapa com a GUI do Ubuntu Keyboard Layout.

Obviamente, isso desativa o teclado alfanumérico além da 4tecla, mas o cifrão ainda pode ser digitado com qualquer tecla Shift.

Estou consciente de escrever uma pergunta massiva com muitas informações inúteis, então vou parar por aqui; por favor, peça qualquer coisa que eu tenha perdido.

Alguma ideia?

mbfisher
fonte

Respostas:

2

Não sei se é a solução que você deseja, mas uma possibilidade de desativar a tecla Shift esquerda seria usar o xmodmap. Crie um arquivo ~/.Xmodmapcom conteúdo

clear shift
add shift = Shift_R

e corra xmodmap ~/.Xmodmap.


Veja comentários / bate-papo:

Você pode ter problemas se houver outras modificações feitas no seu xkbmap por algum outro programa, portanto, redefinir para um xkbmap padrão com algo como setxkbmap uspode ser necessário.

Se você quiser fazer algum teclas respondem a uma única tecla shift, você pode levá-lo layout de teclado atual com xmodmap -pke > .Xmodmapisso lhe dá uma .Xmodmapcom uma lista de todas as suas chaves na forma de keycode XX = functions. Nesta atribuição, cada código de tecla pode ter várias funções no lado direito. Cada um corresponde a um modificador diferente + essa tecla. Você pode inserir o clear + add de cima e adicionar algo parecido add mod5 = Shift_L. A tecla shift direita corresponderia a mod2 enquanto a tecla esquerda seria mod5. Você pode prosseguir e mover as funções mod2 das teclas que deseja chamar com a tecla shift esquerda para mod5 simplesmente inserindo NoSymbolespaços e até chegar à coluna da direita ( keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N).

Trudbert
fonte
Feliz em ajudar. Funcionou?
Trudbert
Desculpe, dia ocupado. Ainda tenho as duas teclas Shift disponíveis após a execução do xmodmap. Preciso fazer mais alguma coisa para obter a alteração?
mbfisher
Tente xmodmap -e "clara mudança" depois que você não deve ter quaisquer teclas shift disponíveis se isso funciona o resto deve funcionar também
Trudbert
Não, ainda tenho as teclas Shift. # xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher
estranho. Nenhuma mensagem de erro? clear deve remover tudo o que está associado ao modificador, para que não haja mais nada. Vou colocar minhas mãos no sistema Linux em mais ou menos uma hora e analisar isso novamente.
Trudbert
2

Aqui está o que finalmente funcionou! Eu usei xmodmape um ~/.Xmodmaparquivo em vez de configuração xkb.

~/.Xmodmap:

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

As duas linhas comentadas (olhando para !) mostram os títulos das colunas antes e depois das minhas alterações. Isso me permitiu especificar a coluna 2 como Shift_L e a coluna 3 como Shift_R, pois mapeei shift_R como Mode_switch.

As alterações são feitas executando:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap usdefine o mapa padrão dos EUA para trabalhar com uma lista limpa e xmodmapanexa as alterações personalizadas.

Quando implementado o !, @, #, $e %personagens só pode ser digitado com a tecla shift direita, e ^, &, *, (e )só pode ser digitado com a tecla shift esquerda.

Agora posso continuar mapeando todas as teclas no lado esquerdo do teclado para serem modificadas apenas pela tecla shift direita (ou seja, os caracteres alfabéticos e suas modificações em maiúsculas) e vice-versa; esta solução significa que eu só preciso remapear o lado esquerdo.

Outros links úteis encontrados ao longo do caminho:

Muito obrigado a @Trudbert por me levar a caminho da resposta!

mbfisher
fonte