Постепенное изучение сочетаний клавиш, предоставляемых AUCTeX

11

Если я это сделаю M-x forward-char, Emacs даст очень полезное сообщение

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

Учитывая тот факт , что Emacs может найти все LaTeX сочетания клавиш в файле latex.elпри LaTeX-math-defaultусловии , по AucTeX, возможно , что в режиме LaTeX (AucTeX) Emacs напоминает мне комбинаций клавиш? Например, после ввода \sigmaEmacs показывает сообщение, которое

You can insert "\sigma" by `s .

Это было бы очень полезно, поскольку позволяет постепенно изучать сочетания клавиш в режиме LaTeX.

название
источник
2
Не ответ на ваш вопрос, но в строке меню должны отображаться сочетания клавиш, если они определены. И то же самое можно с всплывающим меню (которое показывает ярлыки) - например, (global-set-key [C-down-mouse-3] 'mouse-popup-menubar). Таким образом, у вас нет сообщений до тошноты.
юрист
@lawlist Я собирался прокомментировать, что символы математического режима отсутствуют в меню, но у них фактически есть собственное меню! Показаны даже те, которые не имеют определенного сокращения, с кодом, необходимым для их создания. Очень кстати!
Тайлер

Ответы:

9

Изменив мой ответ отсюда, мы можем просто извлечь эти данные LaTeX-math-default, то есть список из 4-х кортежей.

(CHARACTER MACRO MENU UNICODE)

где CHARACTERсимвол, используемый для его привязки (я знаю, что он выглядит как целое число, но это символ, используйте, (string CHARACTER)чтобы увидеть), MACROэто макрос Latex без косой черты, MENUэто имя для меню и UNICODEсимвол Юникода, используемый для отображения в меню. Мы хотим проверить первый и второй элементы:

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

Вероятно, существуют лучшие способы непрерывного отображения выходных данных, но есть один способ использовать post-command-hookвышеуказанную функцию после каждой команды. Мы будем использовать if, чтобы убедиться, что это работает только вlatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))
erikstokes
источник
Большое спасибо за этот ответ. Ваш код работает. После ввода $ \ sigma $ появляется сообщение с сообщением You can insert \sigma with s. Позвольте мне сообщить о возможной ошибке, если я наберу $ \ oplus $ m, появится сообщение об ошибке Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Я думаю, что это связано с тем, что auctexне установлен ярлык для oplus( oplusможно найти в LaTeX-math-default). И с этой ошибки код, кажется, не работает, например, при вводе $ \ sigma $ ничего не происходит.
Имя
@ Имя Я исправил это, чтобы не пытаться печатать, когда CHARACTERэтоnil
erikstokes
Отлично. Несколько незначительных предложений: (1) Я думаю, что сообщение You can insert \sigma with `sлучше, чем You can insert sigma with s. (2) В настоящее время после ввода \rightarrowсообщения You can insert rightarrow with ^Fпоявляется сообщение . Я думаю, что сообщение You can insert \rightarrow with `C-f, возможно, лучше.
Имя
И исправил снова.
erikstokes