qaz*_*wsx 1 emacs elisp keylogger
对于Emacs,如何存储view-lossage收集到外部文件中的内容?理想情况下,我希望以增量和自动方式将这些击键数据存储到外部日志文件中,这意味着在启动Emacs时默认情况下会这样做.
至少在Emacs 24中(我现在无法检查先前的版本),view-lossage状态的文档字符串:
显示最近300次输入击键.
要在文件上记录所有输入,请使用"open-dribble-file".
并C-hf 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"))
Run Code Online (Sandbox Code Playgroud)
实验上,如果文件已存在,则会破坏文件,因此您需要处理该文件.
这是一种方法.它通过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")
Run Code Online (Sandbox Code Playgroud)