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 ESC
funcionalidade 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-g
chave por algum motivo, mas isso raramente acontece.
C-g
para liberá-lo, o ESC
remapeamento não funciona nesse caso.
ESC
entã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 ESC
paz, 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-key
outra 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-char
como nil
no 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-map
prefixo 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 é 27
como 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 ESC
e, 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 escape
em ESC
se não houver ligação disponível paraescape
. Tipo de fallback, se desejar (que é implementado por meio de local-function-key-map
se 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 ESC
quando 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-argument
com ouniversal-argument-map
.