Como posso definir uma associação de chave que substitui globalmente e tem precedência sobre todas as outras associações dessa chave? Desejo substituir todos os mapas de modo principal / secundário e garantir que minha vinculação esteja sempre em vigor.
É claro que isso não funciona:
(global-set-key "\C-i" 'some-function)
Funciona text-mode
, mas quando eu uso lisp-mode
, C-i
é rebote para lisp-indent-line
.
Posso passar e substituir essa ligação em lisp-mode
todos os outros modos individualmente, mas deve haver uma maneira mais fácil. Cada vez que instalo um novo modo para um novo tipo de arquivo, tenho que voltar e verificar se todas as minhas combinações de teclas não estão sendo substituídas pelo novo modo.
Quero fazer isso porque quero emular ligações que já aprendi e arraigou de outros editores.
fonte
Como complemento à resposta de scottfrazer , escrevi o seguinte para que meus atalhos de teclado mantenham a precedência, mesmo que as bibliotecas carregadas posteriormente tragam novos mapas de teclado próprios.
Como os mapas de teclado podem ser gerados em tempo de compilação,
load
parecia o melhor lugar para fazer isso.fonte
Instale
use-package
, avalie e pronto:fonte
use-package
:Install package: use-package [No Match]
Eu encontrei esta questão enquanto procurava por "emacs undefine org mode keybindings", porque eu queria desvincular o comportamento Cc Cb existente para permitir que meu mapa global enterrasse o buffer para funcionar em um buffer org.
Isso acabou sendo a solução mais simples para mim:
fonte
Embora a resposta de Scottfrazer seja exatamente o que você pediu, mencionarei para a posteridade outra solução.
Do Manual Emacs :
Se você vincular suas ligações globais pessoais a Cc mais uma letra, "deveria" estar seguro. No entanto, isso é apenas uma convenção, e qualquer modo ainda pode substituir suas ligações.
fonte
Se você quiser "sempre usar os atalhos de teclado no mapa, a menos que eu os substitua explicitamente por um mapa de modo específico" e presumindo que está usando a abordagem de scottfrazier , você deseja:
assim
deve remover a ligação "\ Ci" do modo secundário apenas no buffer atual. Aviso: isso não foi testado, mas parece ser a abordagem certa. O objetivo de definir o pai em vez de apenas lidar com o valor global de my-keys-minor-mode-map é que quaisquer alterações posteriores no valor global sejam automaticamente refletidas no valor local.
fonte
Eu não acho que você pode. Isso é aproximadamente equivalente a dizer que você deseja definir uma variável global que não pode ser oculta por declarações de variáveis locais em funções. O escopo simplesmente não funciona dessa maneira.
No entanto, pode haver uma maneira de escrever uma função elisp para percorrer a lista de modos e reatribuí-la em cada um para você.
fonte
overriding-local-map
foi projetada especificamente para substituir todos os outros mapas. No entanto, é perigoso usá-lo.A menos que você realmente queira fazer isso sozinho, deve verificar ao redor e ver se alguém já fez isso.
Existe um pacote para Emacs que fornece atalhos de teclado semelhantes aos do Windows. Você deve ser capaz de encontrá-lo no google.
fonte
cua-mode
.