6

Я хочу записать свое использование Mx в emacs в файл, чтобы я мог видеть, для каких функций я должен изучить ярлык для / привязать ярлык для. Желательно просто добавить имена используемых функций в файл / emacs-буфер, возможно, с отметкой времени, чтобы я мог видеть, в каком контексте я их использую. Кто-нибудь знает как это решить?

3 ответа3

5

Вы можете начать с этого elisp, который просто добавит команды, которые вы выполняете, в данный файл журнала. Вы можете полюбоваться и делать автоматические подсчеты, если хотите. Или, вы можете иногда просто передать файл через sort | uniq -c .

(defvar my-m-x-log-file "~/mx.log")
(defadvice execute-extended-command (after log-execute-extended-command activate)
  (let ((logfile (find-file-noselect my-m-x-log-file)))
    (with-current-buffer logfile
      (goto-char (point-max))
      (insert (format "%s\n" this-command))
      (save-buffer))))
3

Я бы предложил добавить консультативную функцию для execute-extended-command и другую для read , чтобы при запуске execute-extended-command все прочитанное в минибуфере записывалось в ваш определенный буфер с отметкой времени.

Я хотел узнать, как использовать совет, поэтому я буду редактировать этот комментарий позже с рабочим кодом elisp, как только у меня будет код, который делает это (должно быть меньше десяти строк).

редактировать:

на основе очень замечательной работы Трея Джексона, вот моя дополнительная версия:

(defvar my-m-x-log-file "~/mx.log")
(defadvice execute-extended-command
  (after log-execute-extended-command activate)
  (let ((logfile (find-file-noselect my-m-x-log-file)))
    (with-current-buffer logfile
      (goto-char (point-max))
      (insert (format "%s --- %s --- "
              (current-time-string)
               this-command))
      (where-is this-command t)
      (insert "\n"))))

Это регистрирует метку времени, команду и привязки клавиш и не скрывает эхо от команд mx.

Вам нужно будет сохранить файл журнала вручную, как любой другой буфер emacs, в отличие от версии Trey. Возможен компромисс, когда в файл записывается, но в минибуфере нет сообщения, отражающего результаты команды.

0

Изменить: при повторном чтении я считаю, что я ответил на неправильный вопрос. Возможно, вам лучше задать этот вопрос по переполнению стека, поскольку для ответа, вероятно, потребуется взломать elisp.

C-h f function-name

получите документацию по имени function-name , включая текущую привязку ключа.

C-h k <key stroke>

покажет текущую функцию, привязанную к любому нажатию клавиши

C-h b

перечислит все активные привязки ключей

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .