Como distinguir Cm de RETURN?

14

Quando estiver no modo javascript, tentar usar, C-c C-m ireceberá um erro dizendo " C-c RETestá indefinido?"

O que faz o Emacs acreditar que estou pressionando RET?

Como posso fazer com que essa combinação de teclas funcione corretamente?

user3139545
fonte
2
Possível duplicata de distinguir corretamente Ctrl + ie Tab #
Drew
1
Mesmo problema, ponto de entrada diferente, acho que seria bom manter as duas perguntas para pessoas provenientes de pesquisas diferentes.
Jordon Biondo 12/02
1
Possível duplicata de Como ligar Ci como diferente da TAB?
Gilles 'SO- stop be evil'

Respostas:

19

Emacs "pensa" que C-mé RETporque "Control M" é o caractere de controle ASCII "retorno de carro". Mesmo que esse motivo seja "histórico", o Emacs pode ser executado em um terminal e, portanto, precisa oferecer suporte à maneira como os terminais ainda funcionam agora.

Tente abrir uma janela do terminal, digitando " ls" e pressionando C-m. Você verá que é interpretado como "retorno", mesmo que você não esteja no Emacs.

Consulte Caractere de controle na Wikipedia para obter detalhes sobre caracteres de controle.

Para distinguir C-mde RETum Emacs da GUI, pode-se mudar C-ipara C-mna resposta do @nispio :

(define-key input-decode-map [?\C-m] [C-m])

;; now we can do this:

(defun my-command ()
  (interactive)
  (message "C-m is not the same as RET any more!"))

(global-set-key (kbd "<C-m>") #'my-command)

Veja também

Constantine
fonte
2
Isso é brilhante, obrigado. Agora eu posso ter C-mcomo um mapa de prefixos para vários cursores.
John Wiegley