Emacs:记录输入命令所需的时间

时间:2013-07-31 06:46:53

标签: logging emacs keyboard duration typing

我是Emacs新手。我目前正在学习导航,编辑等基本命令。

一些按键组合需要更长时间才能完成......他们通常需要更多按键才能按下或更高程度的手指位置杂技:)。我想知道是否有人知道是否有现有的Emacs插件:

  1. 识别用户何时开始输入命令(例如'C-'某事或'M-'某事)并记录该时刻的时间,然后
  2. 等待用户完成输入命令(即在命令被实际执行之前识别命令的点)并记录该时间,然后
  3. 将一些简单的日志记录信息添加到可配置文件中(例如,写入'命令描述','键','进入持续时间')。
  4. 为什么呢?也许它太过分了,但如果我能够分析这样的日志文件并确定哪些命令具有高使用频率以及较长的完成时间,那么它可能会节省我将来的时间。这些命令可以绑定到我的谦卑手指更容易到达的键,例如:)。

    我自己写这个可能是一个很好的学习练习,但如果解决方案已经存在,我可能更愿意节省时间。

1 个答案:

答案 0 :(得分:5)

在这里,请使用此lisp代码:

(global-set-key (kbd "C-t") 'timed-key-seq)

(defvar timed-keys-hash (make-hash-table :test 'equal))

(defun timed-key-seq ()
  (interactive)
  (let* ((t-beg (current-time))
         (key (read-key-sequence "command:"))
         (t-end (current-time))
         (t-diff (time-subtract t-end t-beg))
         (data (gethash key timed-keys-hash)))
    (if data
        (destructuring-bind (times . time) data
          (puthash key (cons (1+ times) (time-add time t-diff))
                   timed-keys-hash))
      (puthash key (cons 1 t-diff) timed-keys-hash))
    (call-interactively (key-binding key))))

(defun anb-report ()
  (interactive)
  (let (entries)
    (maphash (lambda (key data)
               (push
                (format "%s:\t%sx = %s ms\n"
                     key (car data)
                     (format-time-string "%3N" (cdr data)))
                entries))
           timed-keys-hash)
    (message (apply #'concat entries))))

缺点是你需要将timed-key-seq绑定到某个东西, 我建议 C-t 。然后你只需用 C-t 作为所有命令的前缀。 也许有人可以建议defadvice来确保这个功能 每次都要调用,而不必加前缀。

使用anb-report生成报告。它会告诉你你打过多少次 每个组合以及它们合在一起的毫秒数。