Como mapear Caps Lock como a chave de composição usando Xmodmap de forma portável e idempotente?

5

Não consigo encontrar uma maneira de usar Caps Lock como a tecla de composição corretamente. Alguns métodos não são portáveis, pois exigem que você detecte o número da chave usando algo como xev em cada host. Outros métodos resultam em um ~/.Xmodmap que não pode ser passado para xmodmap mais de uma vez sem bad keysym e erros semelhantes. Isso dificulta o teste de alterações no arquivo. Existe alguma maneira de fazer isso em ~/.Xmodmap ?

    
por l0b0 07.01.2014 / 14:42

2 respostas

3

Você está tendo problemas com a idempotência porque está usando keysym em vez de keycode . Pense em keycode como sendo uma atribuição de uma chave a uma função, enquanto keysym é apenas um link de um nome de função para uma função real.

Quando você usa o keysym da seguinte forma:

keysym Caps_Lock = Multi_key

você essencialmente exclui o nome Caps_Lock . Portanto, da próxima vez que você executar xmodmap e referenciar Caps_Lock nessa mesma linha, ficará confuso.

A maneira correta de fazer isso é reatribuir o código de tecla diretamente da seguinte maneira:

keycode 66 = Multi_key

Você pode obter o código-chave do comando xev , por exemplo.

    
por 15.01.2014 / 17:53
1

Este .Xmodmap funciona idempotentemente:

! Use Caps Lock button for compose key
keysym Caps_Lock = Multi_key Caps_Lock

! Remove shift lock functionality
clear Lock

Após fazer login Caps Lock funciona como a chave de composição. Depois de executar xmodmap ~/.Xmodmap manualmente, ele ainda funciona e não há mensagens de erro.

Infelizmente, não é portátil:

$ xmodmap ~/.Xmodmap
xmodmap:  /home/username/.Xmodmap:2:  bad keysym target keysym 'Caps_Lock', no corresponding keycodes
xmodmap:  1 error encountered, aborting.
    
por 15.01.2014 / 13:21

Tags