Respostas:
Você pode fazer (define-key key-translation-map (kbd "ESC") (kbd "C-g")). Eu fiz o mesmo há muito tempo e não tive problemas.
Edite para melhorar a resposta de acordo com os comentários:
Se você deseja manter a ESCfuncionalidade principal, pode fazer
(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Uma coisa a observar é que, se o Emacs travar, você ainda precisará usar a C-gchave por algum motivo, mas isso raramente acontece.
C-gpara liberá-lo, o ESCremapeamento não funciona nesse caso.
ESCentão isso não me incomodou. Mas se você precisar, pode fazer outra tradução, por exemplo(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Meu conselho seria deixar em ESCpaz, porque é uma chave especial.
Por padrão, o Emacs usa ESC(ASCII 27) como o meta-prefix-key. No Manual Elisp:
'esc-map' é o mapa de teclas global para a chave de prefixo. Assim, as definições globais de todos os meta caracteres são realmente encontradas aqui. Este mapa também é a definição de função do 'prefixo ESC'.
e
Em vez disso, os meta caracteres são considerados para fins de pesquisa de chaves como sequências de dois caracteres, o primeiro dos quais é ESC (ou qualquer que seja o valor atual de 'meta-prefix-char'). Assim, a chave 'M-a' é representada internamente como 'ESC a', e sua ligação global é encontrada no slot para 'a' no 'esc-map'.
Portanto, para usar o ESC para outra coisa, você precisará definir meta-pefix-keyoutra coisa e também vincular alguma outra chave ESC-prefix. Também pode haver outras alterações necessárias - nunca tentei isso.
Para mais informações meta-prefix-char, consulte Funções para pesquisa de chaves no manual Elisp.
meta-prefix-charcomo nilno OSX não impedirá que ele seja uma chave de prefixo - apenas o separará da meta-chave. No OSX com uma versão gráfica do Emacs, eu gosto de separar a chave de escape da meta-chave - defino (setq meta-prefix-char nil)no início da minha inicialização para que todas as bibliotecas carregadas posteriormente entendam o que eu quero. Isso me permite usar a meta-chave como chave de prefixo e a tecla de escape como uma chave de prefixo. O esc-mapé definido no nível do código-fonte C dentro keymap.c. Ele deve ser usado como uma chave de prefixo.
esc-mapprefixo para preservar as ligações M padrão?
(setq ns-alternate-modifier 'meta)que torna a meta a tecla alt esquerda no teclado da Apple. Eu gosto de usar a tecla alt à direita para criar caracteres unicode usando as configurações padrão do OSX: (setq ns-right-alternate-modifier 'none)- para inserir caracteres em espanhol, símbolos de parágrafos, etc. Ao criar --with-ns, as teclas alt esquerda e direita são definidas como meta. A configuração padrão vincula a chave de escape à meta-chave no OSX usando o meta-prefix-char, que é 27como você afirmou.
Resposta adorável aqui: https://superuser.com/a/945245/624661
Citação:
Você pode usar isso no seu arquivo Emacs init:
;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)
Você deseja ligar [escape], não (kbd "ESC"), como mostram as ligações referenciadas por Ole . Em estoque, isso funcionará apenas se o emacs frames em um sistema de janelas. Eu acho que isso vale um pouco de explicação.
(kdb "ESC")significa, na verdade, o caractere de controle ASCII ESCe, como glucas mencionou, você certamente não deseja remapear este. Mas Escnão é ASCII ESC: é símbolo escape, pelo menos em um ambiente gráfico. Como ocorre que a ligação (kbd "ESC")afeta Escentão? Isso acontece porque o emacs se traduz escapeem ESC se não houver ligação disponível paraescape . Tipo de fallback, se desejar (que é implementado por meio de local-function-key-mapse você estiver interessado em tais coisas).
Assim, quando você se liga [escape], você está seguro e não precisa se preocupar ESC; além de suas próprias ligações, você apenas precisa aumentar os mapas de teclas que indicam ESCquando eles significam [escape].
Hmm ... bem, quase. Por que esses mapas não são usados [escape]na primeira vez? Porque isso não vai funcionar em um terminal. Se você deseja Esctrabalhar em um dispositivo desse tipo, terá pelo menos para personalizar seu terminal antes.
A história do terminal é relatada em outro post:
Como vincular C- [de verdade? . O que você precisa fazer é dizer ao terminal para enviar uma sequência personalizada quando Escpressionado e, em seguida, mapeá-la para [escape]um estágio inicial de entrada no emacs (the input-decode-map).
Espero que isto ajude.
universal-argumentcom ouniversal-argument-map.