Dada uma string no elisp, eu gostaria de simular o emacs recebendo as teclas necessárias para recriar essa string. Portanto, considerando a string "Hello", o emacs agiria exatamente da mesma forma como se eu tivesse pressionado Shift + H, e, l, l, o. Observe que isso nem sempre é o mesmo que inserir texto no buffer - alguns modos como o modo isearch escutam diretamente os eventos de pressionamento de tecla.
O motivo disso é necessário, porque existem muitos modos e extensões que pressupõem que todas as entradas são provenientes do teclado ou que qualquer alteração no buffer / janela / quadro será associada ao evento de entrada do teclado, e muitos o horário em que eles inspecionam os dados associados a esse evento. Para o modo de reconhecimento de fala no qual trabalho para trabalhar perfeitamente com o corpo de código existente, ele não pode simplesmente chamar diretamente o elisp para executar ações; em vez disso, ele precisa dizer ao elisp para pressionar as teclas para que essas ações aconteçam.
Encontrei eventos de comando não lidos, mas não conheço nenhum código existente que traduza seqüências de caracteres para as seqüências de teclas necessárias. Algo assim já existe?
fonte
(let ((string "C-Beams")) (execute-kbd-macro (kbd (mapconcat #'char-to-string string " "))))
vai funcionar. Provavelmente há uma maneira melhor ...(execute-kbd-macro (kbd "SPC"))
funciona, portanto, você pode escrever algo um pouco mais elaborado do que o mapconcat para fazer essa substituição ... isso me preocupa, embora possa haver outras chaves relevantes que precisam desse tratamento especial.(mapc (lambda (char) (execute-kbd-macro (char-to-string char))) string)
parece funcionar ok. Mas (? É claro) se há um caractere de tabulação, ele vai fingir que está batendo TAB, o que não pode ser ligado a um comando inserir um separador real ...Ok, então minha primeira resposta tem várias deficiências, conforme detalhado em seus comentários.
(ênfase minha)
Portanto, uma solução para passar uma string diretamente para o Emacs como pressionamentos de teclas individuais é:
Isso parece funcionar muito bem (ele até lida com o japonês!), Mas ainda existem algumas esquisitices:
\n
desencadeará C-j(não C-m,RET
ou<return>
)\t
irá dispararTAB
(não<tab>
)fonte