Emacs C-. não está trabalhando no terminal

11

Eu uso o GNU Emacs, geralmente como o emacs -nwque lança a versão do terminal (em oposição à versão da GUI em janelas).

Como escrevo documentos escolares, LaTeXuso flyspell-modepara verificação ortográfica no emacs. Isso funciona bem na versão da GUI, mas em um terminal, encontro problemas com o pressionamento de tecla C-.( Ctrl- .). Em um tty, isso não faz nada, e em terminatorou gnome-terminal, isso simplesmente insere um ".".

O que posso fazer para fazer o que faz na versão em janela (mostrar sugestões de ortografia para uma palavra incorreta)?

EDIT: Caso isso importe, estou usando o Ubuntu 12.04 com o Emacs 23.3.1 (que acredito ser o padrão do repo 12.04).

cg505
fonte
1
O mesmo aqui. Você tentou Esc- x flyspell-mode? Isso funciona para mim.
Masroor
Bem, sim. Eu sempre começo flyspell-modecom M-x, mas ESC xnão parece fazer a diferença.
Cg505
1
O mesmo aqui. No entanto, encontrei uma combinação de teclas padrão que funciona para ambas as versões ESC-TAB.
McNisse
Sim, ESC TABou M-TABambos funcionam para mim. Obrigado pela dica @McNisse.
cg505

Respostas:

4

Parece que a parte importante desta pergunta já foi respondida nos comentários, mas para abordar a causa raiz, caso você esteja curioso, acho que ctrl-. não funciona em um terminal devido a algumas limitações dos emuladores de terminal. Em um terminal padrão, ctrl é definido para enviar o código ASCII da tecla pressionada menos 64 (é por isso que ctrl-J (74) envia nova linha (10) e ctrl-I (73) envia a guia (9), por exemplo ) Como o código ASCII do período é 46, subtrair 64 daria -18, o que é inválido porque é negativo e não há códigos ASCII negativos e, portanto, nada para o emacs receber e entender.

Quando você executa o emacs no modo de janela, o mecanismo do emulador de terminal é ignorado e, em vez disso, é usado o tratamento de teclado mais robusto do X11, que pode lidar com pressionamentos de tecla mais obscuros (em vez de reduzir cada pressionamento de tecla para um caractere ASCII, o programa recebe a tecla original mais todos os modificadores aplicáveis, separadamente). Portanto, é provavelmente impossível fazer o emacs baseado em tty manipular ctrl-. a menos que você faça modificações personalizadas no emulador de terminal (e provavelmente também no emacs).

Paulo
fonte
1
Esta resposta é realmente interessante. Eu me aprofundava mais e descobri que o DEC VT100 funciona de maneira semelhante, mas de maneira diferente, a rigor. Aqui está o que ele faz quando a tecla de controle e outra tecla são pressionadas juntas: 1) consulta a tabela ASCII pelo código de verificação do teclado 2) consulta a tabela de códigos de controle válidos pelo ASCII 3) se for válido, mascara o bit5 e o bit6 do ASCII 4 ) enviar. Portanto, ctrl-J, ctrl-j e ctrl- * poderiam enviar LF, mas a verificação de validade limitava as combinações. Consulte a seção 4-43 do manual técnico do DEC VT100 (página PDF 93).
Kenji Noguchi
Eu posso capturar 'C-.'muito bem com emacs no xterm, mas não com urxvt ou st. Alguma idéia de por que esse poderia ser o caso?
stewSquared
0

Embora a resposta acima forneça uma boa explicação sobre por que não funciona, ela realmente não aborda como fazê-lo funcionar. Para que iTerm2você possa resolver isso, adicione um mapeamento de chave para a sequência de escape . Eu imagino que haveria algo semelhante terminatorougnome-terminal

Chris
fonte