Como definir uma chave de composição no terminal (sem ambiente de desktop)?

17

Eu gostaria de definir uma chave compose no meu sistema (Debian Sid "Wheezy"). Eu não tenho Xorg (e não quero nenhum ambiente de desktop). Apenas no terminal.

Eu gostaria de configurá-lo na minha chave Alt-Gr (direita Alt ). Eu tentei por um tempo, mas não consigo descobrir como configurá-lo.

Estou investigando e encontrei algumas direções:

  • $ showkey me fornece o código de tecla da minha chave Alt-Gr (# 100)

  • $ dumpkeys e $ dumpkeys --compose-only output "o conteúdo atual do driver do teclado", no formato especificado por keymaps , de acordo com a man page

  • $ loadkeys carrega uma tabela de tradução de teclado

Tenho certeza de que não é tão difícil, mas sinto falta de como lidar com isso ...

    
por cedbeu 01.08.2012 / 10:34

2 respostas

10

Nos sistemas Debian e Ubuntu mais recentes, as configurações do teclado são colocadas em /etc/default/keyboard e compartilhadas entre o X e o console. Apenas corra

sudo dpkg-reconfigure keyboard-configuration

e selecione Compose key: Right Alt (AltGr) na tela apropriada.

Você também pode colocar XKBOPTIONS=compose:ralt em /etc/default/keyboard e executar

sudo dpkg-reconfigure console-setup

Os sistemas mais antigos têm uma chave de composição no console por padrão. No layout us , pressionar ambas as teclas Alt juntas funciona como Compor . 1

Por exemplo: Alt + AltGr , ", A = > Ä

Se você preferir AltGr apenas para ser Compor , você precisa mudar

alt keycode 100 = Compose

no seu mapa de teclado ativo para

keycode 100 = Compose

A maneira mais fácil de fazer isso é fazer as alterações acima em /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc .

A melhor maneira é criar um novo arquivo chamado /lib/kbd/keymaps/i386/include/altgr-is-compose.inc com a linha acima, criar um novo mapa de teclado que o inclua e defini-lo como seu mapa de teclado padrão.

  1. PrtScn também atua como Compor por padrão.
por 01.08.2012 / 16:40
2

"compose" no console permite digitar dois caracteres, mas gera um terceiro.

o problema é que as definições de composição usam bytes , tanto como as duas entradas (ou seja, você não pode definir compor em termos de chaves digitadas, mas apenas em termos de símbolos tipados) e a saída.

para fazê-lo funcionar em UTF-8, que é multibyte (de 1 a 4 bytes, pelo menos) exigiria grandes mudanças na forma como a entrada do console é manipulada e substituir o array char simples usado atualmente por algo mais complexo. Parece que não há planos para isso (o consenso entre os desenvolvedores de kernel é que o console deve permanecer um console, algo simples, usado apenas para o último ressortimento; se você realmente precisa de unicode, provavelmente também precisará de bidi, shaping, etc; é melhor rodar um terminal gráfico (um xterm de tela cheia no X11; mas existem outras possibilidades).

Então, de fato, não funciona e não funciona, com caracteres multibyte no console. MAS, ainda funciona se você restringir as definições de composição para ASCII simples.

E eu também descobri que isso também funciona se a saída estiver em iso-8859-1 (que corresponde a valores unicode até 0x00ff); para isso você pode colocar em algum script de início uma linha:

    loadkeys /somepath/somefile

e coloque no arquivo as definições de composição desejadas (tenha cuidado para salvar o arquivo na codificação ISO-8859-1; e use caracteres maiores que 0x7f apenas como saída) a sintaxe de tal arquivo é muito simples, linhas como esta:

    compose 'somechar' 'somotherchar' to 'desiredoutput'

por exemplo:

    compose 'a' 'a' to 'å'
    compose 'a' 'e' to 'æ'

o apóstrofo precisa ser escapado.

o efeito de chaves diacríticas mortas também é definido nesse arquivo; para dead_acute + a você define uma linha como:

    compose '\'' 'a' to 'á'

dead_grave usa backtick ('), dead_diaeresis usa doublequote ("), dead_circumflex usa circunflexo (^) e dead_tilde usa til (~).

    
por 20.02.2013 / 17:13