1

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

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

  1. 识别用户何时开始输入命令(例如“C-”或“M-”)并记录该时刻的时间,然后
  2. 等到用户完成输入命令(即在实际执行命令之前识别命令的点)并记录该时间,然后
  3. 将一些简单的日志信息附加到可配置文件中(例如,写入“命令​​描述”、“键”、“输入持续时间”)以用于特定事件。

为什么?也许这有点矫枉过正,但如果我能够分析这样的日志文件并确定哪些命令的使用频率高且完成时间长,那么将来可能会节省我的时间。这样的命令可以绑定到我不起眼的手指更容易触及的键上,例如:)。

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

4

1 回答 1

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生成报告。它将显示您调用每个组合的次数以及它们一起花费了多少毫秒。

于 2013-07-31T07:36:47.623 回答