Terminais transmitem bytes, não chaves. Teclados como Ctrl + ' precisam ser codificados como seqüências de bytes. Além de caracteres imprimíveis sem modificador ou com apenas Shift , a maioria dos chats não possui caracteres correspondentes e são transmitidos como seqüências de escape, começando com o caractere de escape (o caractere com o valor de byte 27, que você pode escrever como \e
em strings do Emacs). Mas muitos keychords não possuem uma seqüência de escape padrão tradicional, e muitos terminais não transmitem estes keychords nem retiram informações sobre modificadores (transmitindo Ctrl + ' como '
character).
Alguns terminais permitem que você configure sequências de escape para cada teclado. No Terminal.app, você pode fazer isso usando as preferências do teclado .
Para Ctrl + ', escolha 3[39;5~
ou 3[27;5;39~
: estes são dois padrões emergentes, o esquema libtermkey e o esquema xterm. Consulte Problemas com atalhos de teclado ao usar o terminal para obter mais informações .
O Emacs traduz seqüências de escape em sua representação de chave interna por meio de input-decode-map
or local-function-key-map
(ou function-key-map
antes do Emacs 23). Coloque qualquer um deles no seu arquivo init:
(define-key input-decode-map "3[39;5~" [(control ?\')])
(define-key input-decode-map "3[27;5;39~" [(control ?\')])