Aprender gradualmente as combinações de teclas fornecidas pelo AUCTeX

11

Se sim M-x forward-char, o Emacs dá uma mensagem muito útil

You can run the command "forward-char" with C-f.

Considerando o fato de que o Emacs pode encontrar todos os atalhos de teclado LaTeX no arquivo latex.elsob LaTeX-math-defaultfornecido pelo AUCTeX, é possível que no modo LaTeX (AUCTeX) Emacs me recorda os Atalhos de Teclado? Por exemplo, depois de digitar o \sigmaEmacs, é exibida uma mensagem que

You can insert "\sigma" by `s .

Isso seria muito útil, pois permite aprender gradualmente as combinações de teclas no modo LaTeX.

Nome
fonte
2
Não é uma resposta para sua pergunta, mas a barra de menus deve mostrar os atalhos do teclado, se eles estiverem definidos. E a mesma coisa está disponível em um menu pop-up (que mostra os atalhos) - por exemplo (global-set-key [C-down-mouse-3] 'mouse-popup-menubar),. Dessa forma, você não tem mensagens ad nauseam.
lawlist
@lawlist Eu ia comentar que os símbolos do modo matemático não estão no menu, mas na verdade eles têm um menu inteiro próprio! Mesmo os que não possuem um atalho definido são mostrados, com o código necessário para produzi-los. Muito conveniente!
Tyler

Respostas:

9

Modificando minha resposta a partir daqui , podemos extrair esses dados LaTeX-math-default, que é uma lista de quatro tuplas

(CHARACTER MACRO MENU UNICODE)

onde CHARACTERestá o caractere usado para ligá-lo (eu sei que parece um número inteiro, mas é um caractere, use (string CHARACTER)para ver), MACROé a macro Latex sem barra, MENUé o nome dos menus e UNICODEé um caractere unicode usado para exibição em o cardápio. Queremos verificar o primeiro e o segundo elementos:

(defun show-latex-symbol-at-point ()
  (interactive)
  (let* ((sym (symbol-at-point))
         (latex-symbol (TeX-member sym LaTeX-math-default
                                   (lambda (a b)
                                     (string= a (nth 1 b)))))
         (shortcut (nth 0 latex-symbol))
         )
    (if (and latex-symbol shortcut)
        (message "You can insert \\%s with `%s"
                 (nth 1 latex-symbol)
                 (key-description (string shortcut))))))

Provavelmente existem maneiras melhores de mostrar continuamente a saída, mas existe uma maneira post-command-hookde executar a função acima após cada comando. Usaremos um if para garantir que isso seja executado apenas emlatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))
erikstokes
fonte
Muito obrigado por esta resposta. Seu código funciona. Após digitar $ \ sigma $, uma mensagem aparece informando You can insert \sigma with s. Deixe-me relatar um possível bug, se eu digitar $ \ oplus $ m, há um erro informando Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Eu acho que isso é causado pelo fato de auctexnão ter definido um atalho para oplus( opluspode ser encontrado em LaTeX-math-default). E a partir desse erro, o código parece não funcionar, por exemplo, digitando $ \ sigma $ nada acontece.
Nome
@Name Eu fixo-lo para não tentar imprimir quando CHARACTERénil
erikstokes
Perfeito. Algumas sugestões menores: (1) Acho que a mensagem You can insert \sigma with `sé melhor que You can insert sigma with s. (2) Atualmente, depois de digitar, \rightarrowa mensagem You can insert rightarrow with ^Faparece. Eu acho que a mensagem You can insert \rightarrow with `C-fé talvez melhor.
Nome
E, consertado novamente.
Erikstokes