Dado um nome de comando emacs, como você encontraria os atalhos de teclado? (e vice versa)

107

Se eu souber o nome de um comando do emacs, diga "goto-line"; e se eu quiser perguntar se há alguma sequência de teclas associada a este comando?

E vice-versa, dada uma sequência de teclas, como posso encontrar o nome do comando?

Sake
fonte

Respostas:

159

Para encontrar apenas as combinações de teclas para um comando, você pode usar o recurso "onde está" da ajuda do emacs

C-h w command-name

Se várias ligações forem definidas para o comando, todas serão listadas.

Para o inverso, dada uma sequência de teclas, você pode digitar

C-h k key-sequence

Para obter o comando que seria executado.

Você pode obter informações detalhadas sobre um comando, também qualquer função não interativa definida, digitando

C-h f function-name

O que lhe dará informações detalhadas sobre uma função, incluindo quaisquer atalhos de teclado para ela e

C-h v variable-name

fornecerá informações sobre qualquer variável (ligada). Os mapas-chave são mantidos em variáveis, porém os códigos-chave são armazenados em formato bruto. Tente C-h v isearch-mode-mapum exemplo.

Para obter mais ajuda sobre como obter ajuda, você pode digitar

C-h ?
Adam Rosenfield
fonte
Vá direto ao ponto. D'oh.
dmckee --- ex-moderador gatinho
51
Você também pode fazer C-h w <function name>para saber exatamente onde está a chave, não a documentação completa. Por outro lado, você também pode fazer C-h c <key sequence>apenas para saber qual função está associada a uma sequência de teclas.
ShreevatsaR
7
também: Ch w é tipicamente ligado a onde está.
Cheeso
2
Então, eu posso onde está onde estiver quando eu esquecer Ch w. Isso é ótimo ! ;)
Sake
1
Para aqueles que vincularam C-ha algo mais em seus gerenciadores de janela: C-h wé equivalente a M-x where-is. C-h ké equivalente a M-x describe-key. C-h fé equivalente a M-x describe-function. C-h vé equivalente a M-x describe-variable. C-h ?é equivalente a M-x help-for-help. Observe também que f1pode ser usado em vez de C-h.
Ricardo
13

C-h w(ou F1-w): where-isRET algumnome de comando RET

Faz exatamente o que você está pedindo - lista as chaves vinculadas sem informações adicionais. :)

Glen Best
fonte
13

Para obter interativamente o comando vinculado a um atalho de teclado (ou uma sequência de teclas nos termos do Emacs), consulte a resposta selecionada.

Para vincular programaticamente o comando a uma determinada sequência de teclas, use a função key-bindingou lookup-keyque pega uma sequência de teclas e retorna seu comando vinculado. A função key-bindingé o que C-h kusa.

(key-binding (kbd "C-h m"))

retorna o comando vinculado C-h mpesquisando em todos os mapas de teclado atuais. A função lookup-keypesquisa em um único mapa de teclado:

(lookup-key (current-global-map) (kbd "TAB")) ; => indent-for-tab-command
(lookup-key org-mode-map (kbd "TAB")) ; => org-cycle
(lookup-key text-mode-map (kbd "TAB")) ; => nil
(lookup-key isearch-mode-map (kbd "TAB")) ; => isearch-printing-char

Para obter programaticamente todas as sequências de teclas vinculadas a um determinado comando, where-is-internalé provavelmente a função a ser usada. O nome da função que termina com internalparece sugerir que não é para usuários do Emacs usarem em seus arquivos init, mas esta função com uma docstring parece sugerir o contrário. Qualquer pessoa que esteja considerando o uso de where-is-internaldeve primeiro verificar se o remapeamento das chaves pode atingir seu objetivo.

Uma alternativa para encontrar as chaves que estão vinculadas a um comando específico (por exemplo, forward-char) é substitute-command-keys(por exemplo, (substitute-command-keys "\\[forward-char]")). Isso é especialmente útil em textos maiores.

Jisang Yoo
fonte
Olhando a documentação do where-is-internalsugere que não há problema em usá-lo. Além disso, convencionalmente usamos um formato como where-is--internal(observe o traço duplo) para funções “privadas”.
GergelyPolonkai
2
O uso do sufixo -internalestá descrito lá: gnu.org/software/emacs/manual/html_node/elisp/… . Deve ser usado para funções C internas.
Tobias
4

Uma pergunta antiga, mas para o benefício dos novos leitores, existem algumas outras maneiras interessantes de ver as combinações de teclas

M-x describe-bindings

Lista todas as ligações disponíveis atualmente, use isearch, ocorrer, etc. para fazer um bom uso desta lista.

M-x describe-prefix-map

Isso mostra todas as ligações disponíveis no modo atual, você pode usar o buffer de exibição como faria com qualquer outro buffer Emacs somente leitura, por exemplo, você pode pesquisar livremente por strings, etc.

M-x describe-mode

Além de fornecer informações gerais sobre o modo atual, também listará todas as combinações de teclas disponíveis.

M-x describe-minor-mode

Você será solicitado a inserir o nome de um modo menor e, em seguida, serão mostradas informações e combinações de teclas para esse modo menor.

NOTA : Os exemplos abaixo usam pacotes adicionais (disponíveis em MELPA )

Qual chave

Isso mostra as ligações antes de você precisar delas. Insira um prefixo, por exemplo C-xou C-ce uma lista das ligações disponíveis nesse prefixo será exibida.

Você também pode ver uma lista de combinações de teclas disponíveis no modo atual usando:

M-x which-key-show-top-level

É útil vincular which-key-show-top-levela um acorde de tecla de sua escolha, para que você possa ver as teclas disponíveis em qualquer lugar.

Por exemplo, C-s( isearch-forward) tem um extenso mapa de teclas que geralmente é desconhecido. por exemplo, M-s ocomeça a occurusar a string de pesquisa atual, eu não sabia disso há muitos anos usando o Emacs. Ter por which-keyperto me ajudou a descobrir muitas joias raras no Emacs.

https://github.com/justbur/emacs-which-key

Chave guia

A tecla Guia funciona de maneira muito semelhante à which-keyque recomendo dar uma olhada nela para comparar os recursos.

https://github.com/kai2nenobu/guide-key

ocodo
fonte