对于Emacs,如何存储哪些视图丢失收集到外部文件中?

时间:2012-03-18 19:13:04

标签: emacs elisp keylogger

对于Emacs,如何将view-lossage收集的内容存储到外部文件中?理想情况下,我希望以增量和自动方式将这些击键数据存储到外部日志文件中,这意味着在启动Emacs时默认情况下会这样做。

1 个答案:

答案 0 :(得分:6)

至少在Emacs 24中(我现在无法检查先前版本),view-lossage状态的文档字符串:

  

显示最近300次输入击键。

     

要在文件中记录所有输入,请使用`open-dribble-file'。

C-h f open-dribble-file RET 告诉我:

  

open-dribble-file是`C源代码中的交互式内置函数   代码'

     

(open-dribble-file FILE)

     

开始将所有键盘字符写入名为FILE的运球文件。   如果FILE为nil,则关闭所有打开的运球文件。   当Emacs退出时,该文件将被关闭。

只需在.emacs文件中添加如下内容:

(open-dribble-file (expand-file-name "~/.emacs.d/lossage.txt"))

实验上,如果该文件已存在,则会破坏该文件,因此您需要处理该文件。

这是一种方法。它通过使用make-temp-name为dribble文件生成半随机文件名,然后在Emacs存在时将其内容附加到主要丢失日志文件来解释多个Emacs会话。 (如果Emacs崩溃,它将留下临时文件,供您手动处理。)

(defmacro my-persistent-dribble-file (file)
  "Append the dribble-file for this session to persistent lossage log FILE."
  `(let* ((persistent-file (expand-file-name ,file))
          (temporary-file (make-temp-name (concat persistent-file "-")))
          (persistent-arg (shell-quote-argument persistent-file))
          (temporary-arg (shell-quote-argument temporary-file))
          (append-dribble-command (format
                                   "cat %s >>%s && rm %s"
                                   temporary-arg persistent-arg temporary-arg)))
     (open-dribble-file temporary-file)
     (eval `(add-hook 'kill-emacs-hook
                      (lambda () (shell-command ,append-dribble-command))))))

(my-persistent-dribble-file "~/.emacs.d/lossage")