Pergunta

Considerando uma batida de tecla no Emacs, v.g. C-x C-s . Eu posso descobrir qual função ele chama digitando C-h c keystroke , mas como posso encontrar onde este atalho de teclado foi definido?

(Talvez a resposta certa é que ele não pode ser decidido, porque os mapas de teclado não armazenar esse tipo de informação.)

Foi útil?

Solução

As informações a respeito de onde keybindings estão associados com funções não é mantido pelo Emacs. Na verdade, a resposta é geralmente indefinido.

Muitas vezes teclas são configurados como um efeito colateral de um modo menor, ou através do modo-ganchos. A chave de ligação para os modos de menores é muitas vezes armazenados em alguma variável como comint-mode-map. Este mapa de teclado está ativado, definindo o comint-mode modo variável. No entanto, esse mapa modo é uma variável global e qualquer pessoa, em qualquer lugar pode adicionar atalhos de teclado para ele. Então, fazer o que você quer é essencialmente de rastreamento que definir uma variável com um valor particular. Da mesma forma para atalhos de teclado que estão apenas definidos localmente através de ganchos de modo (usando local-set-key). Além disso, você pode até mesmo configurar atalhos de teclado através de variáveis ??de arquivo . Tudo isso é só para dizer que as teclas em Emacs são efêmeras.

Sobre o melhor que você pode fazer é encontrar a função associada com a chave, e olhar nesse arquivo (ou quaisquer arquivos relacionados se o modo é dividido em vários arquivos).

vinculativo

chave de pesquisa no emacs está bastante envolvido devido à infinidade de maneiras que você pode definir / cursos chaves associadas (globalmente, de modo importante, modos menores, imperiosas modos menores, local para buffers, propriedades de texto, etc.). Para uma visão geral, veja esta documentação .

Você pode escrever uma função como este para olhar nos modos menores para ver onde uma combinação de teclas pode ser definido, mas é claro que meu primeiro teste mostrou que o atalho de teclado não foi definido lá. Mas talvez o código será instrutivo.

(defun guess-where-keybinding-is-defined (key)
  "try to guess where a key binding might be defined"
  (interactive (list (read-key-sequence "Describe key: ")))
  (let ((bindings (minor-mode-key-binding key))
        found)
    (while (and bindings (not found))
      (if (setq found (caar bindings))
          (find-function (cdar bindings)))
      (setq bindings (cdr bindings)))))

Existe um problema específico que você está tentando resolver (com excepção a esta pergunta)?

Outras dicas

Basta fazer M-x encontra-função

De Emacs doc:

(função-função encontrar)

Encontre a definição da função perto do ponto.

Localiza o arquivo de origem que contém o definição da função próximo ponto (Seleccionada pela `Função chamada-a-ponto ') numa tampão e lugares ponto antes do definição. Definir marca antes de se mudar, se o buffer já existia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top