Chave diferente de Control para enviar SIG *?

1

Eu gostaria de trocar Ctrl & Super para que eu possa usar a chave física super / meta para copiar / colar / selecionar tudo / encontrar / etc. sem configuração específica do aplicativo, que geralmente não existe.

No entanto, gostaria de manter SIGINT, EOF, suspender e afins na chave de controle físico.

Tentei definir URxvt.keysym.M-c: ^C e estou ciente de que stty pode alterá-lo para, por exemplo, ^K , mas até onde eu consegui dizer, não é possível alterar a tecla modificadora - para um keysym diferente ou para o código de tecla diretamente.

Isso é possível?

    
por OJFord 13.08.2016 / 18:07

1 resposta

2

A conversão de certos pressionamentos de tecla em um sinal é realizada em um nível muito baixo: é feita pelo driver de terminal genérico no kernel, quando transmite entre o processo do emulador de terminal ou o hardware do terminal físico e o programa em execução no terminal. Este driver só entende caracteres (e por caracteres, quero dizer bytes - quando essas interfaces foram projetadas, conjuntos de caracteres multibyte não eram uma coisa).

A maioria das teclas que envolvem modificadores diferentes de Shift ou envolvendo teclas de função não têm caracteres correspondentes, portanto o terminal deve enviar uma sequência de escape de caracteres múltiplos (começando com o ASCII escape character ). Veja bash - ligações de sequências de chaves erradas com control + alt + espaço e Como funciona a entrada de teclado e a saída de texto para mais informações sobre este assunto.

Existem caracteres correspondentes à Ctrl + letra (os caracteres de controle ASCII ), mas não para Super + letra . Meta + C envia a sequência de dois caracteres ESC C e Super + C envia apenas C por padrão na maioria dos terminais. Assim, você pode religar os sinais na Ctrl + letra (e alguns símbolos de pontuação), para um caractere imprimível de byte único, e é sobre isso (também para um não- Byte ASCII, mas isso causaria estragos em UTF-8).

A única solução é configurar o emulador de terminal para enviar Ctrl + C para qualquer tecla que você queira fazer disparar o SIGINT. Para Rxvt, você está no caminho certo, mas ^C insere os dois caracteres ^ e C , você precisa do caractere control-c, que pode ser especificado com um escape octal. Além disso M-c é Meta + C , não Super + C ; para Super + C , execute xmodmap -pm , observe qual mod1 a mod5 é Super e use o dígito correspondente como o caractere modificador, por exemplo

URxvt.keysym.5-c: 
URxvt.keysym.5-c: %pre%3
3
    
por 13.08.2016 / 23:57