Apprendre progressivement les raccourcis clavier fournis par AUCTeX

11

Si je le fais M-x forward-char, Emacs donne un message très utile

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

Compte tenu du fait que Emacs peut trouver tous les raccourcis clavier dans le LATEX fichier latex.elsous LaTeX-math-defaultfourni par AUCTeX, est - il possible qu'en mode LaTeX (AUCTeX) Emacs me rappelle les Keybindings? Par exemple, après avoir tapé \sigmaEmacs, un message s'affiche

You can insert "\sigma" by `s .

Cela serait très utile car il permet d'apprendre progressivement les raccourcis clavier en mode LaTeX.

Nom
la source
2
Pas une réponse à votre question, mais la barre de menu doit afficher les raccourcis clavier s'ils sont définis. Et la même chose est disponible avec un pop - up menu (qui affiche les raccourcis) - par exemple, (global-set-key [C-down-mouse-3] 'mouse-popup-menubar). De cette façon, vous n'avez pas de messages ad nauseam.
lawlist
@lawlist J'allais dire que les symboles du mode mathématique ne sont pas dans le menu, mais ils ont en fait un menu complet! Même ceux qui n'ont pas de raccourci défini sont affichés, avec le code nécessaire pour les produire. Très utile!
Tyler

Réponses:

9

En modifiant ma réponse à partir d' ici, nous pouvons simplement extraire ces données LaTeX-math-default, qui sont une liste de 4 tuples

(CHARACTER MACRO MENU UNICODE)

CHARACTERest le caractère utilisé pour le lier (je sais qu'il ressemble à un entier, mais c'est un caractère, utilisez (string CHARACTER)pour voir), MACROest la macro Latex sans la barre oblique, MENUest le nom des menus et UNICODEest un caractère unicode utilisé pour l'affichage dans le menu. Nous voulons vérifier les premier et deuxième éléments:

(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))))))

Il existe probablement de meilleures façons d'afficher en continu la sortie, mais une façon d'utiliser post-command-hookpour exécuter la fonction ci-dessus après chaque commande. Nous utiliserons un if pour nous assurer que cela ne fonctionne que danslatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))
erikstokes
la source
Merci beaucoup pour cette réponse. Votre code fonctionne. Après avoir tapé $ \ sigma $, un message apparaît You can insert \sigma with s. Permettez-moi de signaler un bogue possible, si je tape $ \ oplus $ m, il y a une erreur indiquant Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Je pense que cela est dû au fait que auctexn'a pas défini de raccourci pour oplus( opluspeut être trouvé sous LaTeX-math-default). Et à partir de cette erreur, le code semble ne pas fonctionner, par exemple en tapant $ \ sigma $, rien ne se passe.
Nom
@Name Je l' ai fixé pour essayer de ne pas imprimer quand CHARACTERestnil
erikstokes
Parfait. Quelques suggestions mineures: (1) Je pense que le message You can insert \sigma with `sest meilleur que You can insert sigma with s. (2) Actuellement après avoir tapé \rightarrowle message You can insert rightarrow with ^Fapparaît. Je pense que le message You can insert \rightarrow with `C-fest peut-être meilleur.
Nom
Et, réparé à nouveau.
erikstokes