我想将我在 emacs 中使用 Mx 的情况记录到一个文件中,这样我就可以知道我应该学习哪些函数的快捷方式/为哪些函数绑定快捷方式。最好将使用的函数的名称附加到文件/emacs 缓冲区,可能带有时间戳,这样我就可以看到我在什么情况下使用它们。有人知道如何解决这个问题吗?
答案1
我建议在 添加一个咨询函数execute-extended-command
,并在 添加另一个咨询函数read
,这样当运行 execute-extended-command 时,在迷你缓冲区中读取的任何内容都会带有时间戳记录到您定义的缓冲区中。
我一直想学习如何使用建议,所以一旦我有了可以执行此操作的代码(应该少于十行),我将稍后使用可行的 elisp 代码编辑此评论。
编辑:
基于 Trey Jackson 的精彩作品,这是我的附加版本:
(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 的版本不同。可能存在一种折衷方案,即文件被写入,但没有消息回显到迷你缓冲区,从而掩盖命令的结果。
答案2
你可以从这个 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
编辑:重读后,我认为我回答了错误的问题。你最好在 Stack Overflow 上提问,因为答案可能需要破解 elisp。
C-h f function-name
将为您提供有关 的文档function-name
,包括当前的键绑定。
C-h k <key stroke>
将显示与任意按键绑定的当前功能
C-h b
将列出所有活动的键绑定