Stopniowe uczenie się skrótów klawiszowych dostarczanych przez AUCTeX

11

Jeśli tak M-x forward-char, Emacs przekazuje bardzo przydatną wiadomość

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

Biorąc pod uwagę fakt, że Emacs można znaleźć wszystkie skróty klawiszowe LaTeX w pliku latex.elpod LaTeX-math-defaultwarunkiem przez AUCTeX, to możliwe, że w trybie LaTeX (AUCTeX) Emacs przypomina mi skróty klawiszowe? Na przykład po wpisaniu \sigmaEmacsa wyświetla komunikat, że

You can insert "\sigma" by `s .

Byłoby to bardzo przydatne, ponieważ pozwala stopniowo uczyć się skrótów klawiszowych w trybie LaTeX.

Imię
źródło
2
Nie jest to odpowiedź na twoje pytanie, ale pasek menu powinien pokazywać skróty klawiaturowe, jeśli są zdefiniowane. To samo jest dostępne w menu podręcznym (które pokazuje skróty) - np (global-set-key [C-down-mouse-3] 'mouse-popup-menubar). W ten sposób nie masz wiadomości ad nauseam.
prawnik
@lawlist Chciałem skomentować, że symbole trybu matematycznego nie są w menu, ale w rzeczywistości mają własne menu! Wyświetlane są nawet te, które nie mają zdefiniowanego skrótu, wraz z kodem potrzebnym do ich utworzenia. Bardzo przydatny!
Tyler,

Odpowiedzi:

9

Modyfikując moją odpowiedź stąd , możemy po prostu wyciągnąć te dane LaTeX-math-default, które są listą 4-krotek

(CHARACTER MACRO MENU UNICODE)

gdzie CHARACTERjest znak użyty do powiązania (wiem, że wygląda jak liczba całkowita, ale to znak, użyj, (string CHARACTER)aby zobaczyć), MACROto makro Latex bez ukośnika, MENUto nazwa menu i UNICODEjest to znak Unicode używany do wyświetlania w menu. Chcemy sprawdzić pierwszy i drugi element:

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

Prawdopodobnie istnieją lepsze sposoby ciągłego wyświetlania wyniku, ale jeden sposób na użycie post-command-hookpowyższej funkcji po każdym poleceniu. Użyjemy if, aby upewnić się, że to tylko działalatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))
erikstokes
źródło
Wielkie dzięki za tę odpowiedź. Twój kod działa. Po wpisaniu $ \ sigma $ pojawia się komunikat You can insert \sigma with s. Pozwól mi zgłosić możliwy błąd, jeśli napiszę $ \ oplus $ m, wystąpi błąd Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Myślę, że jest to spowodowane faktem, że auctexnie ustawiłem skrótu do oplus( oplusmożna znaleźć pod LaTeX-math-default). Po tym błędzie kod wydaje się nie działać, np. Po wpisaniu $ \ sigma $ nic się nie dzieje.
Imię
@Nazwa Naprawiłem to, aby nie próbować drukować, kiedy CHARACTERjestnil
erikstokes
Idealny. Kilka drobnych sugestii: (1) Myślę, że przesłanie You can insert \sigma with `sjest lepsze niż You can insert sigma with s. (2) Obecnie po wpisaniu pojawia się \rightarrowkomunikat You can insert rightarrow with ^F. Myślę, że przesłanie You can insert \rightarrow with `C-fjest może lepsze.
Imię
I naprawione ponownie.
erikstokes