De tempos em tempos, observo um comportamento inesperado ao editar texto. Meu primeiro recurso é geralmente usar C-h k
para descobrir quais funções estão sendo chamadas por uma determinada sequência de teclas. No entanto, às vezes a documentação está em desacordo com o comportamento observado. Nesses casos, geralmente presumo que algum outro pacote tenha se conectado a essa função ou sequência de teclas e está modificando seu comportamento.
Como posso descobrir quais funções estão conectadas à minha sequência de teclas?
Um exemplo que encontrei recentemente foi o fato de pressionar a "tecla e as aspas foram inseridas no início e no final da região ativa. Eu suspeitava que esse não era o comportamento padrão do Emacs, então eu C-h k "
descobri qual função estava realmente sendo chamada.
A describe-key
documentação me disse que a função self-insert-command
estava sendo chamada, que é uma função interna. Para resumir uma longa história, após algumas tentativas e erros, pude determinar que o comportamento foi causado por electric-pair-mode
. No futuro, existe uma maneira mais rápida de chegar a essa conclusão do que desativar pacotes suspeitos um de cada vez até encontrar o culpado?
electric-pair-mode
foi ativado apenas em alguns modos principais? Você ainda vêself-insert-command
para"
quando você fazC-h k
enquantoelectric-pair-mode
está ativo?electric-pair-mode
funciona conectandopost-self-insert-hook
e não alterando a combinação de teclas.C-h k
informa exatamente o que acontece com o pressionamento de tecla. Se você olhar para a documentaçãoself-insert-command
, ela diz claramente quepost-self-insert-hook
é executada após a conclusão do comando.after-change-functions
como Jordon menciona em sua resposta? A documentação para uma função provavelmente não mencionará especificamente esse gancho, sim?C-h k
+ os ganchos padrão == o comportamento completo (mais ou menos). É claro que às vezes isso deixa muitas possibilidades, mas ainda é muito mais transparente do que qualquer outro sistema de software complexo que eu conheça.Respostas:
Não há uma maneira fácil de saber exatamente o que uma única tecla fará.
Se você vir um comportamento adicional, verifique sempre os ganchos comuns. Veja a lista aqui: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html
Na maioria dos casos, os importantes são:
Você precisará inspecionar esses ganchos e examinar as funções que eles contêm para ver qual deles está modificando seu comportamento.
Se as funções nesses ganchos não descreverem completamente o comportamento observado, verifique as funções para obter conselhos que serão exibidos na documentação deles
describe-function
.Edit: Escrevi algumas funções para ajudar a descrever um gancho melhor do que passar pelas funções uma por uma: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb Você pode usar as
describe-hook
definições definidas como as outras funções de descrição. Aqui está uma amostra de sua saída:E aqui está todo o código, caso a essência desapareça:
fonte
documentation
é atualizado para refletir.Talvez não seja uma resposta completa para sua pergunta, mas o pacote
helm-descbinds
ajuda a pesquisar todas as ligações de teclado definidas a partir da representação ascii do atalho. Para cada ocorrência, ela mostra a função interativa associada ao atalho do teclado, e você pode pedirhelm-descbinds
para descrevê- la ou executá- la diretamente a partir dos resultados da pesquisa.Aqui está a descrição do pacote no site do GitHub:
fonte
C-h b
. O meu único desejo é que eu poderia saltar para o item na lista, digitando a seqüência de teclas real em vez de digitarC
-
c
_
C
-
p