Se você deseja vincular apenas algumas seqüências do formato Super + x, Super + c, Super + v a outras seqüências como Ctrl + x, Ctrl + c, Ctrl + v, por exemplo, para que (como o OP deseje) Seqüências específicas de superchave geralmente mapeiam para recortar e colar sem afetar outros usos da chave super em seu sistema, é possível usar apenas a extensão XKB. O procedimento abaixo descreve as etapas e fornece dois exemplos diferentes de detalhes para duas configurações diferentes do teclado inicial; espero que isso forneça informações suficientes para se adaptar ao seu sistema. Ele pressupõe que você esteja confortável com a criação e edição de arquivos no seu sistema, incluindo aqueles em locais do sistema como /usr/share/X11/xkb
.
Decida onde você deseja que sua árvore de configuração XKB resida. Primeiro encontre o sistema. Geralmente está em / usr / share / X11 / xkb, e não tenho muita certeza de como encontrá-lo se ele não estiver lá; você pode simplesmente procurar no seu sistema por diretórios denominados "xkb". De qualquer forma, depois de encontrá-lo, você pode modificar o sistema no local ou usar qualquer diretório de sua escolha. A vantagem de usar o diretório do sistema é que você pode invocar suas alterações com muito mais facilidade, mas a desvantagem é que futuras atualizações do sistema podem sobrescrever suas alterações (você foi avisado). De qualquer forma, todos os nomes de arquivos mencionados a seguir são relativos a este diretório, ao qual me referirei quando necessário como $ XKBLOCAL $, e todos os comandos assumem que esse é seu diretório atual.
Determine qual "tipo" de chave XKB são as chaves x, c, v atuais. A maneira mais fácil de fazer isso é através do comando xkbcomp -a $DISPLAY - | grep -C 6 c,
(observe que a vírgula está intencionalmente incluída no padrão). Na minha primeira instalação de exemplo, isso produz:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
enquanto no meu outro exemplo de configuração isso produz
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
O resultado é que, no primeiro exemplo, as chaves relevantes são do tipo "ALPHABETIC", enquanto no segundo exemplo são do tipo "FOUR_LEVEL". Dependendo da configuração do teclado, você pode achar que eles são de algum outro tipo. A seguir, o tipo será referido como $ TYPE $, que você deve substituir pela sequência ALPHABETIC real ou qualquer outra coisa nos comandos abaixo.
Localize a definição de $ TYPE $ e copie-a para um novo arquivo no diretório $ XKBLOCAL $ / types. Aqui está um comando que faz exatamente isso: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. O nome do arquivo "cutpaste" que eu escolhi é arbitrário, use o nome que você quiser, mas observe que você precisará consultar esse arquivo de forma consistente nas etapas posteriores. Na primeira instalação, esse arquivo obtém o conteúdo
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
e no outro exemplo, obtém o conteúdo
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Edite os tipos de arquivo / cutpaste para fazer duas coisas: adicione um preâmbulo e um postâmbulo que a tornem uma cláusula XKB adequada e altere o nome e a definição do tipo para adicionar mais um nível produzido pelo modificador correspondente a Super. Você deve verificar o que esse modificador está no seu sistema, é provável que o Mod4 seja usado abaixo. As modificações necessárias devem ser evidentes nas duas versões finais exemplificativas de tipos / pasta de corte, a saber:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
e
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Copie as definições de símbolo de chave que foram produzidas pelo grep na segunda etapa em um segundo novo arquivo de símbolos / pasta de corte e adicione preâmbulo e postâmbulo semelhantes e modifique as definições para usar os novos tipos e adicione ações à definição para manipular a chave desejada produzido pelas versões Super. Os resultados disso em nossos dois exemplos são:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
e
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Observe que, no segundo exemplo, extraí alguns espaços em branco (não significativos) para manter o comprimento da linha sob um pouco de controle.
Encontre o nome do conjunto de regras que o XKB está usando no momento. Isso é fácil, é mostrado no resultado de setxkbmap -query
. No meu caso, era "evdev".
Copie a versão do sistema de rules / evdev (ou qualquer que seja o nome do seu conjunto de regras) para $ XKBLOCAL $ / rules / evdev e adicione regras apontando para as opções que criamos. Você tem duas opções aqui: é possível copiar todo o evdev ou apenas as partes que mencionam o modelo, o layout, a variante e as opções de teclado que você está realmente usando. Obviamente, se você estiver modificando os arquivos do sistema, não precisará copiar, apenas editar.
Nesse caso, o que é adicionado é idêntico, independentemente da configuração inicial do teclado, portanto, há apenas um exemplo. Você encontra a seção do arquivo de regras que inicia com ! option = symbols
e adiciona uma linha cutpaste:super = +cutpaste
a essa seção e também encontra a seção do arquivo de regras que inicia com ! option = types
e uma linha cutpaste:super = +cutpaste
a essa seção.
Copie a versão do sistema evdev.lst e adicione uma linha para sua nova opção. Observe que o nome desse arquivo simplesmente corresponde ao nome do arquivo de regras com .lst anexado. Como na etapa anterior, você pode copiar o arquivo inteiro ou apenas a parte referenciada pelo modelo, layout, variante e opção (s) que está usando. Você só precisa encontrar a seção deste arquivo que começa com ! option
e adicionar uma linha como esta: cutpaste:super Add super equivalents of cut and paste operations
a essa seção.
OK, agora todos os arquivos de configuração estão no lugar. Se você modificou os arquivos do sistema, agora poderá chamar sua nova opção com setxkbmap -option cutpaste:super
. Por outro lado, se não, você deve informar ao setxkbmap onde está o seu diretório $ XKBLOCAL $. O que é pior, o servidor também não sabe onde está esse diretório e o setxkbmap não (ou talvez não possa, pois, em última instância, o servidor pode estar executando em outra máquina) o informa. Portanto, você deve canalizar a saída do setxkbmap para o xkbcomp e também informar esse comando onde está o diretório $ XKBLOCAL. A linha de comando completa é, portanto setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Espero que isso ajude / interesse alguém, pois a boa documentação / referência definitiva do XKB é escassa. Uma referência muito útil foi http://madduck.net/docs/extending-xkb/ .