xmodmap problemas e inconsistências com mais de 4 símbolos alternativos por chave

5

Eu estava tentando tornar meu teclado mais útil e usei xmodmap para mapear símbolos matemáticos e gregos para mod3 modifier level. Onde caps lock está mapeado para mod3 . Pelo que entendi, as linhas de 8 entradas em .Xmodmap funcionam da seguinte maneira:

[nada], [shift], [mod3], [mod3 + shift], [altgr], [altgr + shift], [altgr + mod3], [altgr + shift + mod3]

Eu usei isso e funcionou principalmente. Exceto por algumas ocorrências estranhas. Por exemplo:

keycode  49 = backslash bar includes includedin infinity infinity EuroSign EuroSign

Isto produz as primeiras quatro entradas bem, mas depois gira em torno de (altgr + key = backshlash, não infinito). No entanto, se eu fizer

keycode  10 = backslash bar includes includedin infinity infinity EuroSign EuroSign

produz as primeiras quatro entradas e infinitas, mas o sinal do euro não aparece (recebo includes e includedin ). Observe que eu usei apenas uma chave diferente, tudo o resto é o mesmo! Mesmo com apenas 6 entradas (no caso de haver um problema de análise com 8), infinitos não são mostrados nessa chave em particular.

Além disso, mapeei letras em grego para as entradas 3 e 4 (mod3 e mod3 + shift). As minúsculas funcionam bem, mas as maiúsculas não funcionam para Shift + mod3 + S e Shift + mod3 + W e Shift + mod3 + X. Não é um problema de fonte, xev não mostra nenhum evento quando eu uso essas combinações.

A entrada é

keycode  39 = s S Greek_sigma   Greek_SIGMA   integral integral downarrow downarrow

Além disso, as duas últimas entradas geralmente não funcionam.

Ainda pior, uma linha fica particularmente confusa. Eu entrei

keycode  51 = zcaron Zcaron zcaron Zcaron dstroke Dstroke dstroke Dstroke

mas quando eu faço xmodmap -pke eu recebo

keycode  51 = zcaron Zcaron zcaron Zcaron dstroke Dstroke dstroke Dstroke zcaron Zcaron dstroke Dstroke zcaron Zcaron dstroke Dstroke

Observe que duplicou todas as entradas. Algumas chaves fazem isso, mas nem todas elas!

Então, minhas perguntas são:

  • Estou usando as 8 linhas de entrada corretamente?
  • Por que eu obtenho um número diferente de keyyms de trabalho em diferentes códigos de teclas?
  • É possível que algo no gerenciador de janelas mapeie essas combinações e engula-as?
  • Por que algumas linhas são duplicadas quando são aplicadas?
  • Isso é um bug obscuro do xlib?
  • A funcionalidade do modificador é limitada?

Note que estou em uma situação única, onde simplesmente não pode haver atalhos desconhecidos que eu não saiba, porque meu gerenciador de janelas é de minha própria responsabilidade e eu controlei todos eles.

Mais detalhes: o mapeamento do caps lock é feito assim:

keycode  66 = Mode_switch

clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
add control = Control_L Control_R
add mod1 = Alt_L Meta_L
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Hyper_L
add mod5 = ISO_Level3_Shift

O sistema é um arch linux recentemente atualizado.

Edit: Descobri que uma pequena parte do problema (o SWX que não funcionava de todo) era devido à adjacência das teclas no teclado (tecla de interferência, não conseguia lidar com 3 teclas pressionadas simultaneamente esta combinação). O deslocamento para a direita removeu o problema para W e X, mas não para S (neste teclado específico).

O resto ainda é um mistério, particularmente a 5ª e 6ª entrada quebrada para o código-chave 49 (a coisa totalmente inútil acima da guia).

    
por orion 29.03.2014 / 19:27

1 resposta

5

É melhor eu responder a minha própria pergunta para referência futura.

Após uma pesquisa profunda, descobri que xmodmap está realmente obsoleto e é aproximadamente corrigido no modelo de teclado xkb . O modelo xkb não usa uma matriz linear de alternativas, mas divide os layouts em groups , com cada grupo tendo um par de caracteres em diferentes níveis de turno. As definições de xmodmap preenchem as entradas em uma ordem muito engraçada: grupo 1, nível 1,2, grupo 2, nível 1,2, grupo 1, níveis 3 .... Os grupos devem ser como "layouts" e geralmente não são acessados com modificadores, mas com toggling. A exceção é o caractere Mode_switch que usei, mas só acessa o grupo 2.

Tudo ficaria bem, exceto que as chaves têm tipos . Cada chave é definida pelo layout como TWO_LEVEL , FOUR_LEVEL , FOUR_LEVEL_ALPHANUMERIC e assim por diante, e cada nível pode ter uma noção diferente de quais modificadores mapeiam para quais níveis. O comportamento que eu assumi (8 níveis, todas as combinações) foi na verdade LOCAL_EIGHT_LEVEL que não foi usado pelo layout. Portanto, no caso de keycode 51 , o padrão era na verdade TWO_LEVEL , e xmodmap preenchia 3 grupos com as 6 chaves em vez de adicionar 6 níveis ao 1º grupo. O terceiro grupo não foi alcançado pelo modificador Mode_switch . Usar outra chave resultou em comportamento diferente porque o tipo predefinido era diferente.

Como nas repetições na impressão por xmodmap , não sei exatamente o que acontece (imprimi as definições xkb e estava tudo bem), mas não me surpreendo que os erros ocorram quando você mapeia um array multidimensional de comprimento variável para uma única lista de symcodes. A saída não reflete o estado real de qualquer maneira.

Em conclusão, xmodmap é mal . Nunca use isso. Seu comportamento é errático e mal definido na melhor das hipóteses. Não faz o que diz que faz. Faça seus próprios xkb maps. Reutilize a maior parte do layout em include -ing e adicione as modificações necessárias.

No meu caso, a solução é derivar o segundo grupo do layout grego e substituir os símbolos matemáticos em lugares estratégicos, além de algumas modificações no primeiro grupo.

A maioria dos teclados baratos é muito limitada quando se trata de pressionar 3 teclas de cada vez. Isso resultou em falhas erráticas e dependentes de hardware para algumas chaves. Eu vou experimentar com diferentes teclas modificadoras (a chave mais inútil do mundo - a tecla de menu, ou similarmente inútil win-key), e possivelmente comprar um teclado melhor. A combinação de ambos os problemas (hardware quebrado por design + software fraudulento maligno) criou uma situação confusa de aparência aleatória que, a princípio, me impediu de vê-los como problemas separados.

Material de leitura:

por 01.04.2014 / 15:33