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 = symbolse adiciona uma linha cutpaste:super = +cutpastea essa seção e também encontra a seção do arquivo de regras que inicia com ! option = typese uma linha cutpaste:super = +cutpastea 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 ! optione adicionar uma linha como esta: cutpaste:super Add super equivalents of cut and paste operationsa 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/ .