Múltiplas camadas de modificadores com XKB (em um teclado japonês)

5

Eu tenho o seguinte teclado (HHKB JP).

EstouusandooLubuntu14.04eeditei/usr/share/X11/xkb/symbols/usparaimplementarum layout personalizado .

Agora, desejo usar as seguintes chaves como modificadores de 5º, 6º, 7º, ... e 20º nível. (No Windows, eu faço isso com o AutoHotkey, e agora não posso viver sem (pelo menos alguns) deles.)

Eutenho2problemas.

  1. Nãoseiquaissãoos"nomes" para algumas das teclas não padrão no teclado (para adicioná-las a /usr/share/X11/xkb/symbols/us ).
  2. Eu não sei como adicionar modificadores extras com xkb (entendo que xmodmap está obsoleto), especialmente chaves "normais" como 9 .

Minhas perguntas são:

  1. Como faço para descobrir os nomes / códigos para as chaves misteriosas (por exemplo, key <AC01> )?
  2. Como eu adiciono um número arbitrário de camadas modificadoras a uma determinada chave?

Nota: talvez isso não possa ser realizado com o XKB. Eu ficaria feliz em saber de algumas ferramentas de script que podem implementar isso.

    
por étale-cohomology 26.03.2016 / 22:49

1 resposta

4

Os layouts XKB são definidos em um modelo chamado RMLVO : Regras, Modelo, Layout, Variante, Opções. O banco de dados do sistema XKB geralmente está em /usr/share/X11/xkb :

/usr/share/X11/xkb/
├── compat       # ??? dark magic here, avoid
├── geometry     # as in physical, eg for generating layout maps
├── keycodes     # helpful for translating keycodes (from xev) to <FOO>
├── rules        # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols      # main layouts, variants, optional overrides
└── types        # ??? dark magic here, avoid

O diretório keycodes irá definir keynames como <CAPS> ou <AC01> dos scancodes que as chaves estão gerando. setxkbmap -query -verbose 10 mostrará exatamente quais arquivos são acessados para criar seu mapa de chaves atual; quando ele diz keycodes: evdev+aliases(qwerty) , ele está carregando o arquivo ../keycodes/evdev e a sub-rotina qwerty do arquivo ../keycodes/aliases . Se você usar ferramentas como xev para determinar qual código-chave uma chave está gerando, esses arquivos mostrarão qual nome-chave está mapeado para esse código.

Sua pergunta sobre modificadores é mais difícil. Eu só vi referências a 8 níveis ISO , e não tenho certeza se isso é uma limitação XKB ou simplesmente que nenhum layout comum usa mais do que isso. (Depois de examinar isso mais, tenho certeza que você teria que alterar o código XKB para adicionar mais

            symbol    press this
level 1       a       key
level 2       A       shift+key
level 3       á       <level3>+key
level 4       Á       <level3>+shift+key
level 5       ??      <level5>+key
level 6       ??      <level5>+shift+key
level 7       ??      <level5>+<level3>+key
level 8       ??      <level5>+<level3>+shift+key

Como você pode ver, em um layout de 8 níveis, há apenas 2 teclas que atuam como chaves de "novo modificador". Veja /usr/share/X11/xkb/compat/level5 e /usr/share/X11/xkb/types/level5 , onde os comportamentos de deslocamento, trava e bloqueio de nível 5 são definidos; estes são então anexados às chaves por opções de símbolos definidas em /usr/share/X11/xkb/symbols/level5 .

Se você definiu seu próprio modificador level9 , a combinação com os níveis existentes fornecerá mais 8 níveis antes que você precise de outro modificador de nível:

            symbol    press this
level 9       ??      <level9>+key
level 10      ??      <level9>+shift+key
level 11      ??      <level9>+<level3>+key
level 12      ??      <level9>+<level3>+shift+key
level 13      ??      <level9>+<level5>+key
level 14      ??      <level9>+<level5>+shift+key
level 15      ??      <level9>+<level5>+<level3>+key
level 16      ??      <level9>+<level5>+<level3>+shift+key

Como você pode ver, isso está começando a ser um monte de teclas pressionadas de uma só vez. O uso de bloqueios e trincos em vez de turnos reduziria isso, mas isso seria um layout muito complicado, e imaginamos apenas adicionar um selecionador de nível. Cada seletor adicional dobraria os níveis existentes.

Os "modificadores" que você imagina provavelmente estão selecionando um nível específico, e é por isso que você acha que precisa de tantos. Você pode definir ações de seleção como essa e colocá-las em, digamos, level3 dessas chaves, então level3+key9 te dá uma level14_latch action, e então qualquer tecla que você apertar em seguida te dará o 14º nível daquele chave.

Editar : Outra pergunta perguntada especificamente sobre como fazer um ISO_Level4_{Shift,Latch,Lock} e Eu demonstrei um falso ISO_Level4_Latch usando keyyms e ações XKB existentes. Esse método deve ser efetivo para os níveis 4, 6, 7 e 8.

    
por 19.12.2017 / 20:01