Elmo: substituir Ch

8

Eu segui essa resposta e criei meu modo secundário para evitar que minhas combinações de teclas sejam substituídas por quaisquer modos principais.

Então eu coloquei isso no meu init.el:

(define-key my-keys-mode-map (kbd "C-h") 'delete-backward-char)
(define-key my-keys-mode-map (kbd "M-h") 'backward-kill-word)

Está trabalhando com tudo, exceto quando estou helm-find-files. Enquanto M-htrabalha, C-hnão. Se eu pressionar duas vezes, o Helpbuffer aparece dizendo:

^L
Major Mode Bindings Starting With C-h:
key             binding
---             -------

C-h C-b     helm-send-bug-report-from-helm

^L
Global Bindings Starting With C-h:
key             binding
---             -------

Como posso desativar C-hem helm-find-filese continuar usando o meu próprio atalho de teclado?

Boccaperta-IT
fonte

Respostas:

6

C-hé especial: veja minha resposta ao modo html e à vinculação de teclas de retrocesso personalizado .

Em resumo: sempre que você religar, C-hvocê também deve alterar o valor de help-char.

Para desativar sua ação, faça

(setq help-char nil)

(Você também pode configurá-lo para um caractere diferente.)

Além disso, helm-find-filesusa C-hcomo uma chave de prefixo. O código abaixo substitui o C-hprefixo por M-m, que deve liberar C-hpara ser usado como "backspace":

(eval-after-load "helm-files"
  '(let ((helm-find-files-C-h-map (lookup-key helm-find-files-map (kbd "C-h"))))
     ;; make sure C-h is no longer a prefix key
     (define-key helm-find-files-map (kbd "C-h") nil)
     ;; rebind "C-h ..." to "M-m ..." to preserve functionality
     (define-key helm-find-files-map (kbd "M-m") helm-find-files-C-h-map)))
Constantine
fonte
Isso não funciona. Agora C-hnão faz nada e C-h C-hespectáculosC-h C-h is undefined
Boccaperta-IT
@ Boccaperta-IT: eu atualizei a resposta; tente novamente.
Constantine
A adição do código gera um erro na inicialização: O depurador digitou - Erro Lisp: (mapa de teclas de função nula) (mapa de teclas (mapa de teclas (2. helm-send-bug-report-from-helm))) keymap (109. Helm-help) (104. Undefined) (8. Undefined) (4. helm-debug-output)) (lambda nil (mapa de teclas (mapa de teclas (2. helm-send-bug-report-from-helm))) mapa de teclas (109. Helm-help ) (104. Undefined) (8. Undefined) (4. helm-debug-output))) ()
Boccaperta-IT
Usando (define-key helm-find-files-map (kbd "C-h") nil)obras. Não há necessidade de usar (setq help-char nil). Obrigado por me apontar na direção certa.
Boccaperta-IT
@ Boccaperta-IT: Acho que corrigi o código na resposta (necessário para citar o let-form). Quanto à configuração help-char, você não precisa fazer o leme funcionar, mas pode ser necessário para que outros recursos do Emacs (como esqueletos) funcionem (consulte a pergunta à qual vinculei).
Constantine